diff --git a/lib/i18n/az.i18n.json b/lib/i18n/az.i18n.json index 33510061..583df7d3 100644 --- a/lib/i18n/az.i18n.json +++ b/lib/i18n/az.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Təsdiqləmə gözlənilir...\nSəyahətçinizdən (brauzer) daxil olun.", "useBrowser": "Səyahətçini istifadə et", "or": "və ya", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "${product}-a qoşul", "useQuickConnect": "Sürətli Qoşulmanı istifadə et", "quickConnectInstructions": "Jellyfin-də Sürətli Qoşulmanı açın və bu kodu daxil edin.", "quickConnectWaiting": "Təsdiq gözlənilir…", @@ -66,17 +66,17 @@ "exitFullscreen": "Tam ekrandan çıx", "pressBackAgainToExit": "Çıxmaq üçün geri düyməsinə bir daha basın", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Tənqidçilər", + "audience": "Tamaşaçılar", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes tənqidçiləri", + "rottenTomatoesAudience": "Rotten Tomatoes tamaşaçıları" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Tünd", "oledTheme": "OLED", "libraryDensity": "Kitabxana sıxlığı", - "displayScale": "", + "displayScale": "Ekran miqyası", "compact": "Sıx", "comfortable": "Rəhat", "tvCornerSpotlightBackdrop": "Künc işıqlandırma fonu", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "Avtomatik (Tövsiyə olunan)", "bufferSizeWarning": "${heap}MB yaddaş əlçatandır. ${size}MB bufer oynatmaya təsir edə bilər.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Oxutma buferi", + "playbackBufferAuto": "Avtomatik (tövsiyə olunur)", + "playbackBufferLarge": "Böyük", + "playbackBufferExtraLarge": "Çox böyük", + "playbackBufferDescription": "Qeyri-sabit əlaqələrə qarşı daha çox buferləyir. Bufer ölçüsü ilə də məhdudlaşır.", "defaultQualityTitle": "Defolt keyfiyyət", "musicQualityTitle": "Musiqi keyfiyyəti", "subtitleStyling": "Altyazı tənzimləmələri", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Fayl məlumatı", - "overview": "", + "overview": "Ümumi baxış", "video": "Video", "audio": "Səs", "subtitles": "Altyazılar", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Daxili şəkillər", + "dataStreams": "Məlumat axınları", + "lyrics": "Mahnı sözləri", "file": "Fayl", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Əlavələr", + "delivery": "Çatdırılma", + "versionCounter": "${count}-dən ${index} versiya", + "fileCounter": "${count}-dən ${index} fayl", + "noStreams": "Server bu fayl üçün heç bir axın bildirmədi.", + "copyPath": "Yolu kopyala", + "pathCopied": "Fayl yolu kopyalandı", "codec": "Kodek", - "codecTag": "", + "codecTag": "Kodek teqi", "resolution": "Ayırdetmə", - "codedResolution": "", + "codedResolution": "Kodlanmış rezolyusiya", "bitrate": "Bit sürəti (Bitrate)", "frameRate": "Kadr tezliyi", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Dönmə", + "comment": "Şərh", + "audioDescription": "Səs təsviri", + "headerCompression": "Başlıq sıxışdırması", + "sidecarFile": "Sidecar faylı", + "transportTimestamp": "Transport vaxt damğası", + "displayOffset": "Ekran ofseti", + "previewFailureCode": "Önizləmə xəta kodu", + "previewRetries": "Önizləmə cəhdləri", "aspectRatio": "Tərəf nisbəti", - "pixelAspectRatio": "", + "pixelAspectRatio": "Piksel aspekt nisbəti", "profile": "Profil", - "level": "", + "level": "Səviyyə", "bitDepth": "Bit dərinliyi", - "pixelFormat": "", + "pixelFormat": "Piksel formatı", "colorSpace": "Rəng sahəsi", "colorRange": "Rəng diapazonu", "colorPrimaries": "Əsas rənglər", - "colorTransfer": "", + "colorTransfer": "Rəng ötürməsi", "chromaSubsampling": "Rəng alt-diskretləşdirməsi", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Chroma mövqeyi", + "scanType": "Tarama növü", + "interlaced": "Sətirlərarası", + "anamorphic": "Anamorfik", + "referenceFrames": "İstinad kadrları", + "dynamicRange": "Dinamik diapazon", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision səviyyəsi", + "dolbyVisionVersion": "Dolby Vision versiyası", + "dolbyVisionLayers": "Dolby Vision təbəqələri", + "baseLayerCompatibility": "Baza təbəqə uyğunluğu", + "avcBitstream": "AVC bit axını", + "nalLengthSize": "NAL uzunluq ölçüsü", + "scalingMatrix": "Xüsusi miqyaslama matrisi", + "streamIdentifier": "Axın identifikatoru", + "streamIndex": "Axın indeksi", + "streamId": "Axın ID-si", + "language": "Dil", + "languageCode": "Dil kodu", + "streamTitle": "Trek başlığı", "channels": "Kanallar", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Diskretləşdirmə tezliyi", + "spatialAudio": "Məkan səsi", + "textBased": "Mətn əsaslı", + "subtitleFormat": "Sidecar formatı", + "provider": "Provayder", + "matchScore": "Uyğunluq balı", + "externalDelivery": "Ayrıca ötürülə bilər", + "sidecarPath": "Sidecar yolu", + "sourceStream": "Kopyalanan mənbə", + "temporary": "Müvəqqəti", + "timeBase": "Vaxt bazası", "overallBitrate": "Ümumi bit sürəti", "path": "Yol", - "fileName": "", + "fileName": "Fayl adı", "size": "Həcm", - "totalSize": "", + "totalSize": "Ümumi ölçü", "container": "Konteyner", "duration": "Müddət", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Önizləmə miniatürləri", + "previewIndex": "Önizləmə indeksi", + "packetLength": "Paket uzunluğu", + "filePresent": "Fayl mövcuddur", + "fileReadable": "Server tərəfindən oxuna bilir", + "streamPath": "Axın yolu", "optimizedForStreaming": "Yayım üçün optimallaşdırılıb", "has64bitOffsets": "64-bit ofsetlər", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokol", + "mediaType": "Media növü", + "sourceKind": "Mənbə növü", + "optimizedVersion": "Optimallaşdırılmış versiya", + "optimizationTarget": "Optimallaşdırma hədəfi", + "deletedAt": "Silinib", + "remoteSource": "Uzaq mənbə", + "infiniteStream": "Sonsuz axın", + "directPlay": "Birbaşa oynatma", + "directStream": "Birbaşa axın", + "transcoding": "Yenidən kodlaşdırma", + "etag": "ETag", + "versionId": "Versiya ID-si", + "fileId": "Fayl ID-si", + "defaultAudioTrack": "Defolt səs treki", + "defaultSubtitleTrack": "Defolt altyazı treki", + "subtitlesOff": "Söndürülüb", + "flagDefault": "Defolt", + "flagForced": "Məcburi", + "flagSelected": "Seçilib", + "flagExternal": "Xarici", + "flagHearingImpaired": "Eşitmə qüsurlu üçün", + "flagDub": "Dublyaj", + "flagOriginal": "Orijinal" }, "mediaMenu": { "markAsWatched": "Baxıldı olaraq işarələ", @@ -524,35 +524,35 @@ "shufflePlay": "Qarışıq oynat", "shuffleNotAvailableOffline": "Qarışıq oynatma oflayn rejimdə əlçatan deyil", "fileInfo": "Fayl məlumatı", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Seriyanı serverdən sil", + "deleteSeasonFromServer": "Mövsümü serverdən sil", + "deleteShowFromServer": "Serialı serverdən sil", + "deleteMovieFromServer": "Kinonu serverdən sil", + "deleteEpisodeTitle": "Bu seriya silinsin?", + "deleteSeasonTitle": "Bu mövsüm silinsin?", + "deleteShowTitle": "Bu serial silinsin?", + "deleteMovieTitle": "Bu kino silinsin?", + "deleteEpisodeConfirm": "Seriyanı sil", + "deleteSeasonConfirm": "Mövsümü sil", + "deleteShowConfirm": "Serialı sil", + "deleteMovieConfirm": "Kinonu sil", + "deleteAnyway": "Yenə də sil", + "confirmDeleteTarget": "${title} serverinizdən birdəfəlik silinsin?", "deleteMultipleWarning": "Bu bütün seriyaları və faylları əhatə edir.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Bu, içindəki ${n} seriyanı və onun faylını siləcək.", + "other": "Bu, içindəki ${n} seriyanı və onların fayllarını siləcək." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Bu element ${n} fayl kimi saxlanılır və o silinəcək.", + "other": "Bu element ${n} faylda saxlanılır və hamısı silinəcək." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "Eyni faylda saxlanılan ${n} başqa seriya da silinəcək:", + "other": "Eyni faylda saxlanılan ${n} başqa seriya da silinəcək:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy bunun hansı faylları siləcəyini yoxlaya bilmədi, ona görə də yuxarıda adı çəkilən elementdən daha çoxunu silə bilər. Ləğv edib təzədən cəhd edin və ya yenə də silin.", + "deleteScopeUnverifiedNoFileInfo": "Serveriniz bu element üçün fayl təfərrüatlarını təqdim etmədi, ona görə Plezy bunun hansı faylları siləcəyini yoxlaya bilmir. Yuxarıda adı çəkilən elementdən daha çoxunu silə bilər.", "mediaDeletedSuccessfully": "Media elementi uğurla silindi", "mediaFailedToDelete": "Media elementi silinə bilmədi", "rate": "Qiymətləndir", @@ -628,9 +628,9 @@ "playNext": "Növbətini oynat", "playButton": "Oynat", "pauseButton": "Fasilə", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Fasilədə", + "playbackResumed": "Oynadılır", + "loadingVideo": "Video yüklənir", "showPlaybackControls": "Oynatma idarəetmələrini göstər", "hidePlaybackControls": "Oynatma idarəetmələrini gizlət", "seekBackwardButton": "${seconds} saniyə geri sar", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Uyğun oynadıcıya keçilir...", "serverLimitTitle": "Oynatma uğursuz oldu", "serverLimitBody": "Server xətası (HTTP 500). Məhdudiyyət bu seansı rədd etdi.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Fayl əlçatan deyil", + "mediaUnreadableBody": "Server bu elementi tapdı, lakin onun faylını oxuya bilmədi (HTTP 404). Fayl yəqin ki, köçürülüb, silinib və ya onun saxlanma yeri oflayndır. Server sahibindən faylı yoxlamasını və kitabxananı yenidən skan etməsini xahiş edin.", "logsUploaded": "Jurnallar yükləndi", "logsUploadFailed": "Jurnallar yüklənə bilmədi", "logId": "Jurnal ID-si" @@ -861,8 +861,8 @@ "sessionExpiredOne": "${name} üçün seansın vaxtı bitdi", "sessionExpiredMany": "${count} server üçün seansın vaxtı bitdi", "signInAgain": "Yenidən daxil ol", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "${product} qoşulmasını düzəliş et", + "editMediaBrowserIntro": "${serverName} üçün URL-lər əlavə edin və ya silin. Plezy əlçatan olan ən aşağı gecikməli URL-i istifadə edəcək." }, "discover": { "title": "Kəşf et", @@ -1020,36 +1020,36 @@ "uploadLogs": "Jurnalları yüklə" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy başlaya bilmədi", + "failedBody": "Başlatma zamanı nəsə səhv getdi. Aşağıdakı təfərrüatlar nəyin uğursuz olduğunu göstərir.", + "failedBodyRepairable": "Plezy-nin saxlanmış tənzimləmə faylı zədələnib və Plezy başlamazdan əvvəl yenidən qurulmalıdır. Təzədən cəhd etmək kömək etməyəcək — Yaddaşı təmir et seçin.", + "phaseLabel": "Addım", + "showDetails": "Təfərrüatları göstər", + "hideDetails": "Təfərrüatları gizlət", + "copyDetails": "Təfərrüatları kopyala", + "detailsCopied": "Təfərrüatlar buferə kopyalandı", + "uploadDetails": "Təfərrüatları yüklə", + "repairStorage": "Yaddaşı təmir et", + "repairTitle": "Saxlanmış məlumatlar təmir edilsin?", + "repairBodyCommon": "Plezy-nin tənzimləmə faylı zədələnib və oxuna bilmir. Təmir bütün tənzimləmələri defolt vəziyyətinə sıfırlayır.", + "repairBodyOneCredential": "Bir saxlanmış daxil olma məlumatı zədələnib və oxuna bilmir. Təmir yalnız onu silir; digər tənzimləmələrinizə toxunulmur.", + "repairBodySignInsKept": "Serverləriniz və profilləriniz daxil olmuş vəziyyətdə qalmalıdır.", + "repairBodySignInsLost": "Saxlanmış daxil olmalarınızı qoruyan açar bu fayldan bərpa edilə bilmir, ona görə də hər serverə və profilə yenidən daxil olmalı olacaqsınız. Media serverinizdə heç nəyə təsir olunmur.", + "repairBodySessionsUncertain": "İzləyicilər (MAL, AniList, Simkl, Trakt) və Seerr ayrıca saxlanılır və qalıb-qalmayacaqları bəlli deyil. Plezy sizə nəyi saxladığını dəqiq bildirəcək.", + "repairConfirm": "Təmir et", + "repairSucceeded": "Yaddaş təmir edildi", + "repairNeedsRestart": "Yaddaş təmir edildi — yenidən başlatma tələb olunur", + "restartRequiredBody": "Məlumatlarınız təmir edildi, lakin Plezy ondan istifadə etmək üçün yenidən başlamalıdır. Plezy-ni bağlayın və yenidən açın.", + "quitPlezy": "Plezy-dən çıx", + "repairFailed": "Təmir uğursuz oldu", + "repairKeptSignIns": "Serverləriniz və profilləriniz hələ də daxil olub.", + "repairLostSignIns": "Saxlanmış daxil olmalarınızı qoruyan açar bərpa edilə bilmədi. Hər serverə və profilə yenidən daxil olmalı olacaqsınız.", + "repairLostSessions": "Ən azı bir izləyici və ya Seerr əlaqəsi itirildi və yenidən qoşulmalıdır.", + "backupTitle": "Zədələnmiş faylın nüsxəsi saxlanıldı", + "backupWarning": "O, daxil olma məlumatlarınızı ehtiva edir. Onu yükləməyin və ya paylaşmayın.", + "deleteBackup": "Nüsxəni sil", + "backupDeleted": "Nüsxə silindi.", + "previousFailureTitle": "Plezy son dəfə başlaya bilmədi" }, "licenses": { "relatedPackages": "Əlaqəli paketlər", @@ -1107,134 +1107,134 @@ "searchPrompt": "${source} vasitəsilə kino və seriallar axtarın.", "searchFailed": "Axtarış uğursuz oldu. Bağlantınızı yoxlayın.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} populyar", + "rankAiring": "#${n} yayımlanır", + "rankRated": "#${n} qiymətləndirilib", + "rankFavorited": "#${n} favorit", + "rankTrending": "#${n} trenddə", + "rankSeasonal": "${season} üçün #${n}", + "watchingNow": "${n} izləyir", + "available": "Əlçatandır", + "partiallyAvailable": "Hissəvi əlçatandır", + "availableIn4k": "4K əlçatandır", + "requested": "Sorğu göndərildi", + "pendingApproval": "Təsdiq gözlənilir", + "processing": "Emal edilir", + "declined": "Rədd edildi", + "requestFailed": "Sorğu uğursuz oldu", + "requested4k": "4K sorğu göndərildi", + "seasonsAvailable": "${available}/${total} mövsüm", + "nextEpisodeIn": "Ep ${episode} ${duration} sonra", + "nextAiringIn": "Növbəti ${duration} sonra", + "episodesShort": "${n} ep", + "minutesPerEpisode": "${n} dəq/ep", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} siyahıya alınıb", + "viewersDay": "Bu gün ${n} izlədi", + "viewersWeek": "Bu həftə ${n} izlədi", + "viewersMonth": "Bu ay ${n} izlədi", + "viewersYear": "Bu il ${n} izlədi", + "viewersAllTime": "${n} izləyici", + "planning": "${n} izləməyi planlaşdırır", + "favorited": "${n} favorit", + "dropRate": "${percent} izləməyi dayandırdı", "comments": { - "one": "", - "other": "" + "one": "${n} şərh", + "other": "${n} şərh" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} səs", + "watching": "${n} izləyir", + "completed": "${n} tamamladı", + "onHold": "${n} fasilədə", + "dropped": "${n} izləməyi dayandırdı" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Qış", + "spring": "Yaz", + "summer": "Yay", + "fall": "Payız", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "Qısa TV", + "movie": "Kino", + "special": "Xüsusi buraxılış", + "ova": "OVA", + "ona": "ONA", + "music": "Musiqi", + "other": "Digər" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Orijinal", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Vizual roman", + "game": "Oyun", + "webComic": "Veb komiks", + "musicRelease": "Musiqi", + "otherMedia": "Digər" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Rejissor", + "writer": "Ssenarist", + "producer": "Prodüser", + "creator": "Yaradıcı", + "composer": "Bəstəkar" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prikvel", + "sequel": "Sikvel", + "sideStory": "Yan hekayə", + "spinOff": "Spin-off", + "alternativeVersion": "Alternativ versiya", + "summary": "Xülasə", + "parentStory": "Əsas hekayə", + "adaptation": "Adaptasiya", + "other": "Əlaqəli" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "${day} saat ${time}-da yayımlanır", + "broadcastWithZone": "${day} saat ${time} (${timezone}) yayımlanır", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Orijinal başlıq", + "alsoKnownAs": "Digər adları", + "studios": "Studiyalar", + "country": "Ölkə", + "language": "Dil", + "released": "Buraxılıb", + "physicalRelease": "Diskdə", + "ended": "Bitib", + "addedOn": "${date} əlavə edildi", + "yourRating": "Sizin qiymətləndirməniz", + "budget": "Büdcə", + "revenue": "Kassa gəliri", + "contentAdvisory": "Yaş tövsiyəsi", + "tags": "Teqlər", + "revealSpoilerTags": "Spoyler teqlərini göstər", + "links": "Keçidlər", + "watchOn": "İzlə", + "watchTrailer": "Treyleri izlə", + "openOn": "${site} saytında aç", + "crew": "Heyət", + "ratings": "Reytinq", + "schedule": "Cədvəl", "recommendedByUsers": { - "one": "", - "other": "" + "one": "${n} istifadəçi tövsiyə edir", + "other": "${n} istifadəçi tövsiyə edir" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "${who} tövsiyə edir", + "favoritedBy": "${who} favorit edib", + "unairedEpisodes": "${n} hələ yayımlanmayıb", + "recommendedByPercent": "İzləyicilərin ${percent}-i tövsiyə edir", + "relatedTitles": "Əlaqəli başlıqlar", + "background": "Arxa fon" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} nəticə", + "other": "${n} nəticə" } }, "liveTv": { @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Plezy-ni ${service} üzərində aktivləşdirin", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product} serveri əlavə et", "serverUrls": "Server URL-ləri", "serverUrlsHelper": "Vergüllə ayrılmış bir neçə URL-ə icazə verilir.", "findServer": "Server tap", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Yerli ${product} serverləri axtarılır...", + "localMediaBrowserServers": "Yerli ${product} serverləri", "username": "İstifadəçi adı", "password": "Şifrə", "signIn": "Daxil ol", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Plex ilə daxil ol", "pinExpired": "PIN-in vaxtı bitdi. Lütfən təzədən cəhd edin.", "failedToRegisterAccount": "Hesab qeydiyyatı uğursuz oldu: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "${product} server URL-inizi daxil edin", "addConnectionTitle": "Qoşulma əlavə et", "addConnectionTitleScoped": "${name} profilinə əlavə et", "signInWithPlexCard": "Plex ilə daxil ol", "signInWithPlexCardSubtitle": "Bu cihazı səlahiyyətləndirin.", "signInWithPlexCardSubtitleScoped": "Plex hesabını səlahiyyətləndirin.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "${product}-a qoşul", + "connectToMediaBrowserCardSubtitle": "Server URL-inizi, istifadəçi adınızı və şifrənizi daxil edin.", + "connectToMediaBrowserCardSubtitleScoped": "${product} serverinizə daxil olun. ${name} ilə əlaqələndirilir.", "borrowFromAnotherProfile": "Başqa profildən götür", "borrowFromAnotherProfileSubtitle": "Başqa profilin qoşulmasını yenidən istifadə edin." } diff --git a/lib/i18n/bg.i18n.json b/lib/i18n/bg.i18n.json index 986f420d..236133fe 100644 --- a/lib/i18n/bg.i18n.json +++ b/lib/i18n/bg.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Изчакване на удостоверяване...\nВлезте от браузъра си.", "useBrowser": "Използвай браузър", "or": "или", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Свържи се с ${product}", "useQuickConnect": "Използвай Quick Connect", "quickConnectInstructions": "Отворете Quick Connect в Jellyfin и въведете този код.", "quickConnectWaiting": "Изчакване на одобрение…", @@ -66,17 +66,17 @@ "exitFullscreen": "Изход от цял екран", "pressBackAgainToExit": "Натиснете Назад отново, за да излезете", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Критици", + "audience": "Публика", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Критиците на Rotten Tomatoes", + "rottenTomatoesAudience": "Публиката на Rotten Tomatoes" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Тъмна", "oledTheme": "OLED", "libraryDensity": "Плътност на библиотеката", - "displayScale": "", + "displayScale": "Мащаб на дисплея", "compact": "Компактна", "comfortable": "Удобна", "tvCornerSpotlightBackdrop": "Фон с акцент в ъгъла", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "Автоматично (препоръчително)", "bufferSizeWarning": "Налична памет: ${heap} MB. Буфер от ${size} MB може да повлияе на възпроизвеждането.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Буфер за възпроизвеждане", + "playbackBufferAuto": "Автоматично (препоръчително)", + "playbackBufferLarge": "Голям", + "playbackBufferExtraLarge": "Изключително голям", + "playbackBufferDescription": "Буферира повече при нестабилни връзки. Също ограничен от размера на буфера.", "defaultQualityTitle": "Качество по подразбиране", "musicQualityTitle": "Качество на музиката", "subtitleStyling": "Стил на субтитрите", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Включи подробни логове за диагностика", "viewLogs": "Виж логовете", "viewLogsDescription": "Преглед на логовете на приложението", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Изчисти кеша на изображенията", + "clearImageCacheDescription": "Изчиства кешираните обложки и миниатюри. Изображенията може да се зареждат по-бавно, докато не бъдат изтеглени отново.", + "clearImageCacheSuccess": "Кешът на изображенията е изчистен успешно", "resetSettings": "Нулирай настройките", "resetSettingsDescription": "Възстанови настройките по подразбиране. Това не може да бъде отменено.", "resetSettingsSuccess": "Настройките са нулирани успешно", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Информация за файла", - "overview": "", + "overview": "Общ преглед", "video": "Видео", "audio": "Аудио", "subtitles": "Субтитри", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Вградени изображения", + "dataStreams": "Потоци от данни", + "lyrics": "Текстове на песни", "file": "Файл", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Прикачени файлове", + "delivery": "Доставка", + "versionCounter": "Версия ${index} от ${count}", + "fileCounter": "Файл ${index} от ${count}", + "noStreams": "Сървърът не е отчел потоци за този файл.", + "copyPath": "Копирай пътя", + "pathCopied": "Пътят на файла е копиран", "codec": "Кодек", - "codecTag": "", + "codecTag": "Етикет на кодека", "resolution": "Резолюция", - "codedResolution": "", + "codedResolution": "Кодирана разделителна способност", "bitrate": "Битрейт", "frameRate": "Кадрова честота", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Завъртане", + "comment": "Коментар", + "audioDescription": "Аудио описание", + "headerCompression": "Компресия на заглавката", + "sidecarFile": "Сайдкар файл", + "transportTimestamp": "Времева отметка на транспорта", + "displayOffset": "Отместване при показване", + "previewFailureCode": "Код на грешка при прегледа", + "previewRetries": "Опити при прегледа", "aspectRatio": "Съотношение на страните", - "pixelAspectRatio": "", + "pixelAspectRatio": "Съотношение на пиксела", "profile": "Профил", - "level": "", + "level": "Ниво", "bitDepth": "Битова дълбочина", - "pixelFormat": "", + "pixelFormat": "Формат на пикселите", "colorSpace": "Цветово пространство", "colorRange": "Цветови диапазон", "colorPrimaries": "Основни цветове", - "colorTransfer": "", + "colorTransfer": "Цветов трансфер", "chromaSubsampling": "Цветова субдискретизация", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Позиция на хрома", + "scanType": "Тип на сканиране", + "interlaced": "С преплетени редове", + "anamorphic": "Анаморфен", + "referenceFrames": "Референтни кадри", + "dynamicRange": "Динамичен обхват", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Ниво на Dolby Vision", + "dolbyVisionVersion": "Версия на Dolby Vision", + "dolbyVisionLayers": "Слоеве на Dolby Vision", + "baseLayerCompatibility": "Съвместимост на базовия слой", + "avcBitstream": "AVC битов поток", + "nalLengthSize": "Размер на дължината на NAL", + "scalingMatrix": "Персонализирана матрица за мащабиране", + "streamIdentifier": "Идентификатор на потока", + "streamIndex": "Индекс на потока", + "streamId": "ID на потока", + "language": "Език", + "languageCode": "Код на езика", + "streamTitle": "Заглавие на пистата", "channels": "Канали", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Честота на дискретизация", + "spatialAudio": "Пространствено аудио", + "textBased": "Текстов", + "subtitleFormat": "Сайдкар формат", + "provider": "Доставчик", + "matchScore": "Степен на съвпадение", + "externalDelivery": "Може да се предоставя отделно", + "sidecarPath": "Път на сайдкар файла", + "sourceStream": "Копирано от", + "temporary": "Временен", + "timeBase": "Времева база", "overallBitrate": "Общ битрейт", "path": "Път", - "fileName": "", + "fileName": "Име на файла", "size": "Размер", - "totalSize": "", + "totalSize": "Общ размер", "container": "Контейнер", "duration": "Продължителност", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Миниатюри за преглед", + "previewIndex": "Индекс на прегледа", + "packetLength": "Дължина на пакета", + "filePresent": "Файлът е наличен", + "fileReadable": "Четим от сървъра", + "streamPath": "Път на потока", "optimizedForStreaming": "Оптимизирано за стрийминг", "has64bitOffsets": "64-битови отмествания", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Протокол", + "mediaType": "Тип медия", + "sourceKind": "Вид източник", + "optimizedVersion": "Оптимизирана версия", + "optimizationTarget": "Цел на оптимизацията", + "deletedAt": "Изтрит", + "remoteSource": "Отдалечен източник", + "infiniteStream": "Безкраен поток", + "directPlay": "Директно възпроизвеждане", + "directStream": "Директен поток", + "transcoding": "Транскодиране", + "etag": "ETag", + "versionId": "ID на версията", + "fileId": "ID на файла", + "defaultAudioTrack": "Звукова пътека по подразбиране", + "defaultSubtitleTrack": "Субтитри по подразбиране", + "subtitlesOff": "Изкл.", + "flagDefault": "По подразбиране", + "flagForced": "Принудителни", + "flagSelected": "Избран", + "flagExternal": "Външен", + "flagHearingImpaired": "За хора с увреден слух", + "flagDub": "Дублаж", + "flagOriginal": "Оригинал" }, "mediaMenu": { "markAsWatched": "Маркирай като гледано", @@ -524,35 +524,35 @@ "shufflePlay": "Разбъркано възпроизвеждане", "shuffleNotAvailableOffline": "Разбърканото възпроизвеждане не е налично офлайн", "fileInfo": "Информация за файла", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Изтрий епизода от сървъра", + "deleteSeasonFromServer": "Изтрий сезона от сървъра", + "deleteShowFromServer": "Изтрий сериала от сървъра", + "deleteMovieFromServer": "Изтрий филма от сървъра", + "deleteEpisodeTitle": "Да изтрия ли този епизод?", + "deleteSeasonTitle": "Да изтрия ли този сезон?", + "deleteShowTitle": "Да изтрия ли този сериал?", + "deleteMovieTitle": "Да изтрия ли този филм?", + "deleteEpisodeConfirm": "Изтрий епизода", + "deleteSeasonConfirm": "Изтрий сезона", + "deleteShowConfirm": "Изтрий сериала", + "deleteMovieConfirm": "Изтрий филма", + "deleteAnyway": "Изтрий въпреки това", + "confirmDeleteTarget": "Завинаги да изтрия ли ${title} от сървъра ви?", "deleteMultipleWarning": "Това включва всички епизоди и техните файлове.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Това изтрива целия ${n} епизод в него, както и файла му.", + "other": "Това изтрива всичките ${n} епизода в него, както и техните файлове." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Този елемент се съхранява като ${n} файл, който ще бъде изтрит.", + "other": "Този елемент се съхранява в ${n} файла и всички те ще бъдат изтрити." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} друг епизод се съхранява в същия файл и също ще бъде изтрит:", + "other": "${n} други епизода се съхраняват в същия файл и също ще бъдат изтрити:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy не успя да провери кои файлове ще бъдат премахнати, така че може да изтрие повече от посочения по-горе елемент. Откажете и опитайте отново, или изтрийте въпреки това.", + "deleteScopeUnverifiedNoFileInfo": "Сървърът ви не предостави данни за файловете на този елемент, така че Plezy не може да провери кои файлове ще бъдат премахнати. Може да изтрие повече от посочения по-горе елемент.", "mediaDeletedSuccessfully": "Елементът е изтрит успешно", "mediaFailedToDelete": "Неуспешно изтриване на елемента", "rate": "Оцени", @@ -628,9 +628,9 @@ "playNext": "Пусни следващото", "playButton": "Пусни", "pauseButton": "Пауза", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "На пауза", + "playbackResumed": "Възпроизвежда се", + "loadingVideo": "Зареждане на видеото", "showPlaybackControls": "Покажи контролите за възпроизвеждане", "hidePlaybackControls": "Скрий контролите за възпроизвеждане", "seekBackwardButton": "Превърти назад ${seconds} секунди", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Премахнато от продължаване на гледането", "errorLoading": "Грешка: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Някои медийни сървъри не можаха да бъдат претърсени. Показват се наличните резултати.", "streamInterrupted": "Потокът прекъсна. Натиснете „Пусни“ или превъртете, за да опитате отново.", "liveStreamInterrupted": "Потокът на живо прекъсна. Натиснете „Пусни“, за да опитате отново.", "fileInfoNotAvailable": "Информацията за файла не е налична", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Превключване към съвместим плейър...", "serverLimitTitle": "Възпроизвеждането е неуспешно", "serverLimitBody": "Грешка на сървъра (HTTP 500). Вероятно лимит за пропускателна способност/транскодиране е отхвърлил тази сесия. Помолете собственика да го коригира.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Файлът е недостъпен", + "mediaUnreadableBody": "Сървърът намери този елемент, но не можа да прочете файла му (HTTP 404). Файлът вероятно е бил преместен, изтрит или хранилището му е офлайн. Помолете собственика на сървъра да провери файла и да сканира отново библиотеката.", "logsUploaded": "Логовете са качени", "logsUploadFailed": "Неуспешно качване на логовете", "logId": "ID на лога" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Сесията за ${name} е изтекла", "sessionExpiredMany": "Сесиите за ${count} сървъра са изтекли", "signInAgain": "Влез отново", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Редактирай връзката с ${product}", + "editMediaBrowserIntro": "Добавете или премахнете URL адреси за ${serverName}. Plezy ще използва достъпния URL адрес с най-ниска латентност." }, "discover": { "title": "Открий", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Търсенето е неуспешно: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Търсенето не можа да достигне до нито един медиен сървър.", "connectionTimeout": "Изтече времето за връзка при зареждане на ${context}", "connectionFailed": "Не може да се осъществи връзка с медиен сървър", "unableToLoad": "Не може да се зареди ${context}. Опитайте отново.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Качи логовете" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy не можа да стартира", + "failedBody": "Нещо се обърка по време на стартирането. Детайлите по-долу показват какво е причинило грешката.", + "failedBodyRepairable": "Запазеният файл с настройки на Plezy е повреден и трябва да бъде възстановен, преди Plezy да стартира. Повторните опити няма да помогнат — изберете „Ремонт на хранилището“.", + "phaseLabel": "Стъпка", + "showDetails": "Покажи детайлите", + "hideDetails": "Скрий детайлите", + "copyDetails": "Копирай детайлите", + "detailsCopied": "Детайлите са копирани в клипборда", + "uploadDetails": "Качи детайлите", + "repairStorage": "Ремонт на хранилището", + "repairTitle": "Да ремонтирам ли съхранените данни?", + "repairBodyCommon": "Файлът с настройки на Plezy е повреден и не може да бъде прочетен. Ремонтът връща всяка настройка към стойността ѝ по подразбиране.", + "repairBodyOneCredential": "Един запис за вход е повреден и не може да бъде прочетен. Ремонтът премахва само него; останалите ви настройки не се пипат.", + "repairBodySignInsKept": "Сървърите и профилите ви трябва да останат вписани.", + "repairBodySignInsLost": "Ключът, защитаващ запазените ви вписвания, не може да бъде възстановен от този файл, така че ще трябва да се впишете отново във всеки сървър и профил. Нищо на медийния ви сървър не се засяга.", + "repairBodySessionsUncertain": "Трекърите (MAL, AniList, Simkl, Trakt) и Seerr се съхраняват отделно и може да оцелеят или не. Plezy ще ви каже точно какво е запазил.", + "repairConfirm": "Ремонтирай", + "repairSucceeded": "Хранилището е ремонтирано", + "repairNeedsRestart": "Хранилището е ремонтирано — изисква се рестартиране", + "restartRequiredBody": "Данните ви бяха ремонтирани, но Plezy трябва да стартира наново, преди да ги използва. Затворете Plezy и го отворете отново.", + "quitPlezy": "Изход от Plezy", + "repairFailed": "Ремонтът се провали", + "repairKeptSignIns": "Сървърите и профилите ви са все още вписани.", + "repairLostSignIns": "Ключът, защитаващ запазените ви вписвания, не можа да бъде възстановен. Ще трябва да се впишете отново във всеки сървър и профил.", + "repairLostSessions": "Поне една връзка с трекър или Seerr беше загубена и трябва да бъде възстановена.", + "backupTitle": "Запазено е копие на повредения файл", + "backupWarning": "То съдържа вашите данни за вписване. Не го качвайте и не го споделяйте.", + "deleteBackup": "Изтрий копието", + "backupDeleted": "Копието е изтрито.", + "previousFailureTitle": "Plezy не успя да стартира последния път" }, "licenses": { "relatedPackages": "Свързани пакети", @@ -1060,7 +1060,7 @@ "navigation": { "libraries": "Библиотеки", "downloads": "Изтегляния", - "liveTv": "Телевизия на живо", + "liveTv": "TV на живо", "explore": "Разгледай" }, "explore": { @@ -1107,134 +1107,134 @@ "searchPrompt": "Търси филми и сериали в ${source}.", "searchFailed": "Търсенето се провали. Провери връзката си и опитай отново.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} популярен", + "rankAiring": "#${n} в ефир", + "rankRated": "#${n} оценен", + "rankFavorited": "#${n} най-харесван", + "rankTrending": "#${n} в тенденция", + "rankSeasonal": "#${n} през ${season}", + "watchingNow": "${n} гледат", + "available": "Наличен", + "partiallyAvailable": "Частично наличен", + "availableIn4k": "Наличен в 4K", + "requested": "Заявен", + "pendingApproval": "В очакване на одобрение", + "processing": "Обработва се", + "declined": "Отхвърлен", + "requestFailed": "Заявката се провали", + "requested4k": "Заявен в 4K", + "seasonsAvailable": "${available}/${total} сезона", + "nextEpisodeIn": "Еп. ${episode} след ${duration}", + "nextAiringIn": "Следващ след ${duration}", + "episodesShort": "${n} еп.", + "minutesPerEpisode": "${n} мин/еп", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} в списък", + "viewersDay": "${n} гледали днес", + "viewersWeek": "${n} гледали тази седмица", + "viewersMonth": "${n} гледали този месец", + "viewersYear": "${n} гледали тази година", + "viewersAllTime": "${n} зрители", + "planning": "${n} планират да гледат", + "favorited": "${n} в любими", + "dropRate": "${percent} го изоставиха", "comments": { - "one": "", - "other": "" + "one": "${n} коментар", + "other": "${n} коментара" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} гласа", + "watching": "${n} го гледат", + "completed": "${n} завършили", + "onHold": "${n} на пауза", + "dropped": "${n} изоставили" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Зима", + "spring": "Пролет", + "summer": "Лято", + "fall": "Есен", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "ТВ", + "tvShort": "ТВ късометражен", + "movie": "Филм", + "special": "Специален", + "ova": "OVA", + "ona": "ONA", + "music": "Музика", + "other": "Друго" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Оригинал", + "manga": "Манга", + "lightNovel": "Лайт новела", + "novel": "Роман", + "visualNovel": "Визуална новела", + "game": "Игра", + "webComic": "Уеб комикс", + "musicRelease": "Музика", + "otherMedia": "Друго" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Режисьор", + "writer": "Сценарист", + "producer": "Продуцент", + "creator": "Създател", + "composer": "Композитор" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Приквел", + "sequel": "Сиквел", + "sideStory": "Странична история", + "spinOff": "Спин-оф", + "alternativeVersion": "Алтернативна версия", + "summary": "Резюме", + "parentStory": "Основна история", + "adaptation": "Адаптация", + "other": "Свързано" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Излъчва се в ${day} от ${time}", + "broadcastWithZone": "Излъчва се в ${day} от ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Оригинално заглавие", + "alsoKnownAs": "Известен също като", + "studios": "Студия", + "country": "Държава", + "language": "Език", + "released": "Излязъл", + "physicalRelease": "На диск", + "ended": "Приключил", + "addedOn": "Добавен на ${date}", + "yourRating": "Вашата оценка", + "budget": "Бюджет", + "revenue": "Боксофис", + "contentAdvisory": "Възрастова препоръка", + "tags": "Етикети", + "revealSpoilerTags": "Покажи етикетите за спойлери", + "links": "Връзки", + "watchOn": "Гледай в", + "watchTrailer": "Гледай трейлъра", + "openOn": "Отвори в ${site}", + "crew": "Екип", + "ratings": "Оценки", + "schedule": "Програма", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Препоръчан от ${n} потребител", + "other": "Препоръчан от ${n} потребители" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Препоръчан от ${who}", + "favoritedBy": "В любими от ${who}", + "unairedEpisodes": "${n} все още не са излъчени", + "recommendedByPercent": "Препоръчан от ${percent} от зрителите", + "relatedTitles": "Свързани заглавия", + "background": "Фон" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} резултат", + "other": "${n} резултата" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Редактирай правило за синхронизация", "removeSyncRule": "Премахни правило за синхронизация", "removeSyncRuleConfirm": "Да се спре ли синхронизацията за \"${title}\"? Изтеглените епизоди ще останат.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Да спра ли синхронизирането на „${title}“?", + "deleteSyncRuleDownloads": "Изтрий и свързаните изтегляния", + "deleteSyncRuleDownloadsDescription": "Изтеглянията, използвани от друго правило за синхронизация или профил, ще бъдат запазени.", "syncRuleCreated": "Правилото за синхронизация е създадено — запазват се ${count} негледани епизода", "syncRuleUpdated": "Правилото за синхронизация е обновено", "syncRuleRemoved": "Правилото за синхронизация е премахнато", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Правилото за синхронизация и свързаните изтегляния са премахнати", + "syncRuleCleanupBusy": "Правилата за синхронизация в момента се обновяват. Опитайте отново след малко.", + "syncRuleCleanupUnavailable": "Свързаните изтегляния не можаха да бъдат идентифицирани безопасно. Свържете се отново със сървъра и опитайте отново, или премахнете правилото, без да изтривате изтеглянията.", "syncedNewEpisodes": "Синхронизирани са ${count} нови епизода за ${title}", "activeSyncRules": "Правила за синхронизация", "noSyncRules": "Няма правила за синхронизация", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Активиране на Plezy в ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Добави ${product} сървър", "serverUrls": "URL адреси на сървъра", "serverUrlsHelper": "Позволени са няколко URL адреса, разделени със запетаи.", "findServer": "Намери сървър", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Търсене на локални ${product} сървъри...", + "localMediaBrowserServers": "Локални ${product} сървъри", "username": "Потребителско име", "password": "Парола", "signIn": "Вход", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Вход с Plex", "pinExpired": "PIN-ът изтече преди вход. Моля, опитайте отново.", "failedToRegisterAccount": "Неуспешна регистрация на акаунт: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Въведете URL адреса на вашия ${product} сървър", "addConnectionTitle": "Добави връзка", "addConnectionTitleScoped": "Добави към ${name}", "signInWithPlexCard": "Вход с Plex", "signInWithPlexCardSubtitle": "Удостоверете това устройство. Споделените сървъри се добавят.", "signInWithPlexCardSubtitleScoped": "Удостоверете Plex акаунт. Домашните потребители стават профили.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Свържи се с ${product}", + "connectToMediaBrowserCardSubtitle": "Въведете URL адреса на сървъра, потребителското име и паролата.", + "connectToMediaBrowserCardSubtitleScoped": "Впишете се в своя ${product} сървър. Обвързва се с ${name}.", "borrowFromAnotherProfile": "Използвай от друг профил", "borrowFromAnotherProfileSubtitle": "Използвай връзка от друг профил. PIN-защитените профили изискват PIN." } diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index c103fc10..26563a15 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Venter på godkendelse...\nLog ind fra din browser.", "useBrowser": "Brug browseren", "or": "eller", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Opret forbindelse til ${product}", "useQuickConnect": "Brug Quick Connect", "quickConnectInstructions": "Åbn Quick Connect i Jellyfin, og indtast denne kode.", "quickConnectWaiting": "Venter på godkendelse…", @@ -66,17 +66,17 @@ "exitFullscreen": "Forlad fuldskærm", "pressBackAgainToExit": "Tryk på tilbage igen for at afslutte", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Anmeldere", + "audience": "Publikum", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes-anmeldere", + "rottenTomatoesAudience": "Rotten Tomatoes-publikum" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Mørk", "oledTheme": "OLED", "libraryDensity": "Bibliotekstæthed", - "displayScale": "", + "displayScale": "Skalering", "compact": "Kompakt", "comfortable": "Komfortabel", "tvCornerSpotlightBackdrop": "Fremhævet baggrundsbillede i hjørnet", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "Automatisk (anbefalet)", "bufferSizeWarning": "${heap} MB hukommelse tilgængelig. En buffer på ${size} MB kan påvirke afspilningen.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Afspilningsbuffer", + "playbackBufferAuto": "Auto (anbefalet)", + "playbackBufferLarge": "Stor", + "playbackBufferExtraLarge": "Ekstra stor", + "playbackBufferDescription": "Bufrer mere mod ustabile forbindelser. Begrænses også af bufferstørrelsen.", "defaultQualityTitle": "Standardkvalitet", "musicQualityTitle": "Musikkvalitet", "subtitleStyling": "Undertekststil", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Aktiver detaljeret logning til fejlfinding", "viewLogs": "Vis logfiler", "viewLogsDescription": "Vis programmets logfiler", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Ryd billedcache", + "clearImageCacheDescription": "Ryd cachelagrede covers og thumbnails. Billeder kan indlæse langsommere, indtil de downloades igen.", + "clearImageCacheSuccess": "Billedcachen er ryddet", "resetSettings": "Nulstil indstillinger", "resetSettingsDescription": "Gendan standardindstillinger. Dette kan ikke fortrydes.", "resetSettingsSuccess": "Indstillinger nulstillet", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Filinfo", - "overview": "", + "overview": "Oversigt", "video": "Video", "audio": "Lyd", "subtitles": "Undertekster", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Indlejrede billeder", + "dataStreams": "Datastrømme", + "lyrics": "Tekster", "file": "Fil", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Vedhæftninger", + "delivery": "Levering", + "versionCounter": "Version ${index} af ${count}", + "fileCounter": "Fil ${index} af ${count}", + "noStreams": "Serveren rapporterede ingen strømme for denne fil.", + "copyPath": "Kopiér sti", + "pathCopied": "Filstien er kopieret", "codec": "Codec", - "codecTag": "", + "codecTag": "Codec-tag", "resolution": "Opløsning", - "codedResolution": "", + "codedResolution": "Kodet opløsning", "bitrate": "Bitrate", "frameRate": "Billedhastighed", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotation", + "comment": "Kommentar", + "audioDescription": "Lydbeskrivelse", + "headerCompression": "Headerkomprimering", + "sidecarFile": "Sidecar-fil", + "transportTimestamp": "Transporttidsstempel", + "displayOffset": "Visningsforskydning", + "previewFailureCode": "Preview-fejlkode", + "previewRetries": "Preview-forsøg", "aspectRatio": "Billedformat", - "pixelAspectRatio": "", + "pixelAspectRatio": "Pixel-billedformat", "profile": "Profil", - "level": "", + "level": "Niveau", "bitDepth": "Bitdybde", - "pixelFormat": "", + "pixelFormat": "Pixelformat", "colorSpace": "Farverum", "colorRange": "Farveområde", "colorPrimaries": "Farveprimærer", - "colorTransfer": "", + "colorTransfer": "Farveoverførsel", "chromaSubsampling": "Chroma-subsampling", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Chroma-placering", + "scanType": "Scanningstype", + "interlaced": "Interlaced", + "anamorphic": "Anamorfisk", + "referenceFrames": "Referenceframes", + "dynamicRange": "Dynamisk område", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision-niveau", + "dolbyVisionVersion": "Dolby Vision-version", + "dolbyVisionLayers": "Dolby Vision-lag", + "baseLayerCompatibility": "Basislagskompatibilitet", + "avcBitstream": "AVC-bitstrøm", + "nalLengthSize": "NAL-længdestørrelse", + "scalingMatrix": "Brugerdefineret skaleringsmatrix", + "streamIdentifier": "Strømidentifikator", + "streamIndex": "Strømindex", + "streamId": "Strøm-ID", + "language": "Sprog", + "languageCode": "Sprogkode", + "streamTitle": "Sportitel", "channels": "Kanaler", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Samplingshastighed", + "spatialAudio": "Rumlig lyd", + "textBased": "Tekstbaseret", + "subtitleFormat": "Sidecar-format", + "provider": "Udbydder", + "matchScore": "Matchscore", + "externalDelivery": "Kan leveres separat", + "sidecarPath": "Sidecar-sti", + "sourceStream": "Kopieret fra", + "temporary": "Midlertidig", + "timeBase": "Tidsbase", "overallBitrate": "Samlet bitrate", "path": "Sti", - "fileName": "", + "fileName": "Filnavn", "size": "Størrelse", - "totalSize": "", + "totalSize": "Samlet størrelse", "container": "Container", "duration": "Varighed", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Preview-thumbnails", + "previewIndex": "Preview-index", + "packetLength": "Pakkelængde", + "filePresent": "Fil til stede", + "fileReadable": "Læsbar af serveren", + "streamPath": "Strømsti", "optimizedForStreaming": "Optimeret til streaming", "has64bitOffsets": "64-bit-forskydninger", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokol", + "mediaType": "Medietype", + "sourceKind": "Kildetype", + "optimizedVersion": "Optimeret version", + "optimizationTarget": "Optimeringsmål", + "deletedAt": "Slettet", + "remoteSource": "Fjernkilde", + "infiniteStream": "Uendelig strøm", + "directPlay": "Direkte afspilning", + "directStream": "Direkte strømning", + "transcoding": "Transkodning", + "etag": "ETag", + "versionId": "Versions-ID", + "fileId": "Fil-ID", + "defaultAudioTrack": "Standard lydspor", + "defaultSubtitleTrack": "Standard undertekstspor", + "subtitlesOff": "Fra", + "flagDefault": "Standard", + "flagForced": "Tvunget", + "flagSelected": "Valgt", + "flagExternal": "Ekstern", + "flagHearingImpaired": "Hørehæmmede", + "flagDub": "Dub", + "flagOriginal": "Original" }, "mediaMenu": { "markAsWatched": "Markér som set", @@ -524,35 +524,35 @@ "shufflePlay": "Afspil tilfældigt", "shuffleNotAvailableOffline": "Tilfældig afspilning er ikke tilgængelig offline", "fileInfo": "Filinfo", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Slet episode fra serveren", + "deleteSeasonFromServer": "Slet sæson fra serveren", + "deleteShowFromServer": "Slet TV-serie fra serveren", + "deleteMovieFromServer": "Slet film fra serveren", + "deleteEpisodeTitle": "Slet denne episode?", + "deleteSeasonTitle": "Slet denne sæson?", + "deleteShowTitle": "Slet denne TV-serie?", + "deleteMovieTitle": "Slet denne film?", + "deleteEpisodeConfirm": "Slet episode", + "deleteSeasonConfirm": "Slet sæson", + "deleteShowConfirm": "Slet TV-serie", + "deleteMovieConfirm": "Slet film", + "deleteAnyway": "Slet alligevel", + "confirmDeleteTarget": "Slet ${title} permanent fra din server?", "deleteMultipleWarning": "Dette inkluderer alle episoder og deres filer.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Dette sletter alle ${n} episode i den og dens fil.", + "other": "Dette sletter alle ${n} episoder i den og deres filer." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Dette emne er gemt som ${n} fil, som vil blive slettet.", + "other": "Dette emne er gemt på tværs af ${n} filer, og alle vil blive slettet." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} anden episode er gemt i samme fil og vil også blive slettet:", + "other": "${n} andre episoder er gemt i samme fil og vil også blive slettet:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy kunne ikke kontrollere, hvilke filer dette vil fjerne, så det kan slette mere end det ovennævnte emne. Annuller og prøv igen, eller slet alligevel.", + "deleteScopeUnverifiedNoFileInfo": "Din server leverede ikke filoplysninger for dette emne, så Plezy kan ikke kontrollere, hvilke filer dette vil fjerne. Det kan slette mere end det ovennævnte emne.", "mediaDeletedSuccessfully": "Mediet blev slettet", "mediaFailedToDelete": "Mediet kunne ikke slettes", "rate": "Bedøm", @@ -628,9 +628,9 @@ "playNext": "Afspil næste", "playButton": "Afspil", "pauseButton": "Pause", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Pauseret", + "playbackResumed": "Afspiller", + "loadingVideo": "Indlæser video", "showPlaybackControls": "Vis afspilningsknapper", "hidePlaybackControls": "Skjul afspilningsknapper", "seekBackwardButton": "Spol ${seconds} sekunder tilbage", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Fjernet fra Fortsæt med at se", "errorLoading": "Fejl: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Nogle medieservere kunne ikke søges i. Viser tilgængelige resultater.", "streamInterrupted": "Streamen blev afbrudt. Tryk på afspil, eller spol for at prøve igen.", "liveStreamInterrupted": "Livestreamen blev afbrudt. Tryk på afspil for at prøve igen.", "fileInfoNotAvailable": "Filinfo ikke tilgængelig", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Skifter til kompatibel afspiller...", "serverLimitTitle": "Afspilning mislykkedes", "serverLimitBody": "Serverfejl (HTTP 500). En båndbredde- eller transkodningsgrænse afviste sandsynligvis sessionen. Bed ejeren om at justere den.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Fil utilgængelig", + "mediaUnreadableBody": "Serveren fandt dette emne, men kunne ikke læse filen (HTTP 404). Filen er sandsynligvis flyttet, slettet, eller dens lager er offline. Bed serverejeren om at kontrollere filen og scanne biblioteket igen.", "logsUploaded": "Logfilerne blev uploadet", "logsUploadFailed": "Logfilerne kunne ikke uploades", "logId": "Log-ID" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Sessionen er udløbet for ${name}", "sessionExpiredMany": "Sessionerne er udløbet for ${count} servere", "signInAgain": "Log ind igen", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Rediger ${product}-forbindelse", + "editMediaBrowserIntro": "Tilføj eller fjern URL'er for ${serverName}. Plezy bruger den tilgængelige URL med laveste latenstid." }, "discover": { "title": "Opdag", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Søgning mislykkedes: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Søgningen kunne ikke nå nogen medieserver.", "connectionTimeout": "Forbindelsen fik timeout under indlæsning af ${context}", "connectionFailed": "Kan ikke oprette forbindelse til medieserver", "unableToLoad": "Kunne ikke indlæse ${context}. Prøv igen.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Upload logfiler" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy kunne ikke starte", + "failedBody": "Der gik noget galt under opstart. Oplysningerne nedenfor viser, hvad der gik galt.", + "failedBodyRepairable": "Plezy's gemte indstillingsfil er beskadiget og skal genopbygges, før Plezy kan starte. Det hjælper ikke at prøve igen — vælg Reparer lager.", + "phaseLabel": "Trin", + "showDetails": "Vis detaljer", + "hideDetails": "Skjul detaljer", + "copyDetails": "Kopiér detaljer", + "detailsCopied": "Detaljer kopieret til udklipsholder", + "uploadDetails": "Upload detaljer", + "repairStorage": "Reparer lager", + "repairTitle": "Reparer gemte data?", + "repairBodyCommon": "Plezy's indstillingsfil er beskadiget og kan ikke læses. Reparation nulstiller alle indstillinger til deres standardværdier.", + "repairBodyOneCredential": "Én gemt loginoplysning er beskadiget og kan ikke læses. Reparation fjerner kun den; dine andre indstillinger forbliver urørt.", + "repairBodySignInsKept": "Dine servere og profiler bør forblive logget ind.", + "repairBodySignInsLost": "Nøglen, der beskytter dine gemte loginoplysninger, kan ikke gendannes fra denne fil, så du skal logge ind på alle servere og profiler igen. Intet på din medieserver er påvirket.", + "repairBodySessionsUncertain": "Trackere (MAL, AniList, Simkl, Trakt) og Seerr gemmes separat, og det er uvist, om de overlever. Plezy fortæller dig præcis, hvad det beholdt.", + "repairConfirm": "Reparer", + "repairSucceeded": "Lager repareret", + "repairNeedsRestart": "Lager repareret — genstart påkrævet", + "restartRequiredBody": "Dine data er blevet repareret, men Plezy skal starte på ny, før det kan bruge dem. Luk Plezy, og åbn det igen.", + "quitPlezy": "Afslut Plezy", + "repairFailed": "Reparation mislykkedes", + "repairKeptSignIns": "Dine servere og profiler er stadig logget ind.", + "repairLostSignIns": "Nøglen, der beskytter dine gemte loginoplysninger, kunne ikke gendannes. Du skal logge ind på alle servere og profiler igen.", + "repairLostSessions": "Mindst én tracker- eller Seerr-forbindelse gik tabt og skal genetableres.", + "backupTitle": "En kopi af den beskadigede fil blev gemt", + "backupWarning": "Den indeholder dine loginoplysninger. Upload eller del den ikke.", + "deleteBackup": "Slet kopi", + "backupDeleted": "Kopi slettet.", + "previousFailureTitle": "Plezy kunne ikke starte sidste gang" }, "licenses": { "relatedPackages": "Relaterede pakker", @@ -1107,134 +1107,134 @@ "searchPrompt": "Søg efter film og serier på ${source}.", "searchFailed": "Søgningen mislykkedes. Tjek din forbindelse, og prøv igen.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} populær", + "rankAiring": "#${n} på luften", + "rankRated": "#${n} bedømt", + "rankFavorited": "#${n} favorit", + "rankTrending": "#${n} populær lige nu", + "rankSeasonal": "#${n} i ${season}", + "watchingNow": "${n} ser med", + "available": "Tilgængelig", + "partiallyAvailable": "Delvist tilgængelig", + "availableIn4k": "4K tilgængelig", + "requested": "Anmodet", + "pendingApproval": "Afventer godkendelse", + "processing": "Behandles", + "declined": "Afvist", + "requestFailed": "Anmodningen mislykkedes", + "requested4k": "4K anmodet", + "seasonsAvailable": "${available}/${total} sæsoner", + "nextEpisodeIn": "Afsnit ${episode} om ${duration}", + "nextAiringIn": "Næste om ${duration}", + "episodesShort": "${n} afsnit", + "minutesPerEpisode": "${n} min/afsnit", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} opført", + "viewersDay": "${n} så det i dag", + "viewersWeek": "${n} så det denne uge", + "viewersMonth": "${n} så det denne måned", + "viewersYear": "${n} så det i år", + "viewersAllTime": "${n} seere", + "planning": "${n} planlægger at se det", + "favorited": "${n} favoritter", + "dropRate": "${percent} droppede det", "comments": { - "one": "", - "other": "" + "one": "${n} kommentar", + "other": "${n} kommentarer" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} stemmer", + "watching": "${n} ser det", + "completed": "${n} færdigset", + "onHold": "${n} på pause", + "dropped": "${n} droppede" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Vinter", + "spring": "Forår", + "summer": "Sommer", + "fall": "Efterår", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV-kort", + "movie": "Film", + "special": "Special", + "ova": "OVA", + "ona": "ONA", + "music": "Musik", + "other": "Andet" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Original", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Visual novel", + "game": "Spil", + "webComic": "Webtegneserie", + "musicRelease": "Musik", + "otherMedia": "Andet" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Instruktør", + "writer": "Forfatter", + "producer": "Producer", + "creator": "Skaber", + "composer": "Komponist" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Sequel", + "sideStory": "Bihistorie", + "spinOff": "Spin-off", + "alternativeVersion": "Alternativ version", + "summary": "Resumé", + "parentStory": "Hovedhistorie", + "adaptation": "Adaption", + "other": "Relateret" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Sendes ${day} kl. ${time}", + "broadcastWithZone": "Sendes ${day} kl. ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Originaltitel", + "alsoKnownAs": "Også kendt som", + "studios": "Studier", + "country": "Land", + "language": "Sprog", + "released": "Udgivet", + "physicalRelease": "På disk", + "ended": "Afsluttet", + "addedOn": "Tilføjet ${date}", + "yourRating": "Din bedømmelse", + "budget": "Budget", + "revenue": "Billetindtægter", + "contentAdvisory": "Aldersvejledning", + "tags": "Tags", + "revealSpoilerTags": "Vis spoilertags", + "links": "Links", + "watchOn": "Se på", + "watchTrailer": "Se trailer", + "openOn": "Åbn på ${site}", + "crew": "Crew", + "ratings": "Bedømmelser", + "schedule": "Program", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Anbefalet af ${n} bruger", + "other": "Anbefalet af ${n} brugere" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Anbefalet af ${who}", + "favoritedBy": "Favorit hos ${who}", + "unairedEpisodes": "${n} ikke sendt endnu", + "recommendedByPercent": "Anbefalet af ${percent} af seerne", + "relatedTitles": "Relaterede titler", + "background": "Baggrund" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} resultat", + "other": "${n} resultater" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Rediger synkroniseringsregel", "removeSyncRule": "Fjern synkroniseringsregel", "removeSyncRuleConfirm": "Stop synkronisering af \"${title}\"? Downloadede episoder beholdes.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Stop synkronisering af \"${title}\"?", + "deleteSyncRuleDownloads": "Slet også tilknyttede downloads", + "deleteSyncRuleDownloadsDescription": "Downloads, der bruges af en anden synkroniseringsregel eller profil, beholdes.", "syncRuleCreated": "Synkroniseringsregel oprettet — beholder ${count} usete episoder", "syncRuleUpdated": "Synkroniseringsregel opdateret", "syncRuleRemoved": "Synkroniseringsregel fjernet", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Synkroniseringsregel og tilknyttede downloads fjernet", + "syncRuleCleanupBusy": "Synkroniseringsregler opdateres lige nu. Prøv igen om et øjeblik.", + "syncRuleCleanupUnavailable": "Tilknyttede downloads kunne ikke identificeres sikkert. Genopret forbindelse til serveren og prøv igen, eller fjern reglen uden at slette downloads.", "syncedNewEpisodes": "Synkroniserede ${count} nye episoder for ${title}", "activeSyncRules": "Synkroniseringsregler", "noSyncRules": "Ingen synkroniseringsregler", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Aktiver Plezy på ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Tilføj ${product}-server", "serverUrls": "Server-URL'er", "serverUrlsHelper": "Du kan angive flere URL'er adskilt med komma.", "findServer": "Find server", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Leder efter lokale ${product}-servere...", + "localMediaBrowserServers": "Lokale ${product}-servere", "username": "Brugernavn", "password": "Adgangskode", "signIn": "Log ind", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Log ind med Plex", "pinExpired": "PIN-koden udløb før login. Prøv igen.", "failedToRegisterAccount": "Kunne ikke registrere kontoen: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Indtast din ${product}-server-URL", "addConnectionTitle": "Tilføj forbindelse", "addConnectionTitleScoped": "Tilføj til ${name}", "signInWithPlexCard": "Log ind med Plex", "signInWithPlexCardSubtitle": "Godkend denne enhed. Delte servere tilføjes.", "signInWithPlexCardSubtitleScoped": "Godkend en Plex-konto. Plex Home-brugere bliver til profiler.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Opret forbindelse til ${product}", + "connectToMediaBrowserCardSubtitle": "Indtast din server-URL, brugernavn og adgangskode.", + "connectToMediaBrowserCardSubtitleScoped": "Log ind på din ${product}-server. Tilknyttes til ${name}.", "borrowFromAnotherProfile": "Lån fra en anden profil", "borrowFromAnotherProfileSubtitle": "Genbrug en anden profils forbindelse. PIN-beskyttede profiler kræver en PIN." } diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index f1d6243b..5ab6d7dc 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Warte auf die Authentifizierung …\nMelde dich über deinen Browser an.", "useBrowser": "Browser verwenden", "or": "oder", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Mit ${product} verbinden", "useQuickConnect": "Quick Connect verwenden", "quickConnectInstructions": "Öffne Quick Connect in Jellyfin und gib diesen Code ein.", "quickConnectWaiting": "Warte auf Bestätigung…", @@ -66,17 +66,17 @@ "exitFullscreen": "Vollbild verlassen", "pressBackAgainToExit": "Zum Beenden erneut Zurück drücken", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Kritiker", + "audience": "Publikum", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten-Tomatoes-Kritiker", + "rottenTomatoesAudience": "Rotten-Tomatoes-Publikum" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Dunkel", "oledTheme": "OLED", "libraryDensity": "Darstellungsdichte der Mediathek", - "displayScale": "", + "displayScale": "Skalierung", "compact": "Kompakt", "comfortable": "Großzügig", "tvCornerSpotlightBackdrop": "Backdrop in der Ecke", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "Automatisch (empfohlen)", "bufferSizeWarning": "${heap} MB Speicher verfügbar. Ein Puffer von ${size} MB kann die Wiedergabe beeinträchtigen.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Wiedergabepuffer", + "playbackBufferAuto": "Automatisch (empfohlen)", + "playbackBufferLarge": "Groß", + "playbackBufferExtraLarge": "Extra groß", + "playbackBufferDescription": "Puffert mehr gegen instabile Verbindungen. Zusätzlich durch die Puffergröße begrenzt.", "defaultQualityTitle": "Standardqualität", "musicQualityTitle": "Musikqualität", "subtitleStyling": "Untertitel-Stil", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Detaillierte Protokolle zur Fehleranalyse aktivieren", "viewLogs": "Protokolle anzeigen", "viewLogsDescription": "App-Protokolle anzeigen", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Bildercache leeren", + "clearImageCacheDescription": "Zwischengespeicherte Artworks und Vorschaubilder löschen. Bilder können langsamer laden, bis sie erneut heruntergeladen werden.", + "clearImageCacheSuccess": "Bildercache erfolgreich geleert", "resetSettings": "Einstellungen zurücksetzen", "resetSettingsDescription": "Standardeinstellungen wiederherstellen. Dies kann nicht rückgängig gemacht werden.", "resetSettingsSuccess": "Einstellungen erfolgreich zurückgesetzt", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Dateiinformationen", - "overview": "", + "overview": "Übersicht", "video": "Video", "audio": "Audio", "subtitles": "Untertitel", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Eingebettete Bilder", + "dataStreams": "Datenstreams", + "lyrics": "Songtexte", "file": "Datei", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Anhänge", + "delivery": "Bereitstellung", + "versionCounter": "Version ${index} von ${count}", + "fileCounter": "Datei ${index} von ${count}", + "noStreams": "Der Server hat für diese Datei keine Streams gemeldet.", + "copyPath": "Pfad kopieren", + "pathCopied": "Dateipfad kopiert", "codec": "Codec", - "codecTag": "", + "codecTag": "Codec-Tag", "resolution": "Auflösung", - "codedResolution": "", + "codedResolution": "Codierte Auflösung", "bitrate": "Bitrate", "frameRate": "Bildrate", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotation", + "comment": "Kommentar", + "audioDescription": "Audiodeskription", + "headerCompression": "Header-Komprimierung", + "sidecarFile": "Sidecar-Datei", + "transportTimestamp": "Transport-Zeitstempel", + "displayOffset": "Anzeige-Offset", + "previewFailureCode": "Fehlercode der Vorschau", + "previewRetries": "Vorschau-Wiederholungsversuche", "aspectRatio": "Seitenverhältnis", - "pixelAspectRatio": "", + "pixelAspectRatio": "Pixel-Seitenverhältnis", "profile": "Profil", - "level": "", + "level": "Level", "bitDepth": "Bittiefe", - "pixelFormat": "", + "pixelFormat": "Pixelformat", "colorSpace": "Farbraum", "colorRange": "Farbbereich", "colorPrimaries": "Primärfarben", - "colorTransfer": "", + "colorTransfer": "Farbübertragung", "chromaSubsampling": "Chroma-Subsampling", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Chroma-Position", + "scanType": "Scan-Typ", + "interlaced": "Interlaced", + "anamorphic": "Anamorph", + "referenceFrames": "Referenzbilder", + "dynamicRange": "Dynamikbereich", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby-Vision-Level", + "dolbyVisionVersion": "Dolby-Vision-Version", + "dolbyVisionLayers": "Dolby-Vision-Ebenen", + "baseLayerCompatibility": "Kompatibilität der Basisebene", + "avcBitstream": "AVC-Bitstream", + "nalLengthSize": "NAL-Längengröße", + "scalingMatrix": "Benutzerdefinierte Skalierungsmatrix", + "streamIdentifier": "Stream-Kennung", + "streamIndex": "Stream-Index", + "streamId": "Stream-ID", + "language": "Sprache", + "languageCode": "Sprachcode", + "streamTitle": "Track-Titel", "channels": "Kanäle", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Abtastrate", + "spatialAudio": "Räumliches Audio", + "textBased": "Textbasiert", + "subtitleFormat": "Sidecar-Format", + "provider": "Anbieter", + "matchScore": "Übereinstimmungswert", + "externalDelivery": "Kann separat bereitgestellt werden", + "sidecarPath": "Sidecar-Pfad", + "sourceStream": "Kopiert von", + "temporary": "Temporär", + "timeBase": "Zeitbasis", "overallBitrate": "Gesamtbitrate", "path": "Pfad", - "fileName": "", + "fileName": "Dateiname", "size": "Größe", - "totalSize": "", + "totalSize": "Gesamtgröße", "container": "Container", "duration": "Dauer", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Vorschaubilder", + "previewIndex": "Vorschau-Index", + "packetLength": "Paketlänge", + "filePresent": "Datei vorhanden", + "fileReadable": "Vom Server lesbar", + "streamPath": "Stream-Pfad", "optimizedForStreaming": "Für Streaming optimiert", "has64bitOffsets": "64-Bit-Offsets", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokoll", + "mediaType": "Medientyp", + "sourceKind": "Quellenart", + "optimizedVersion": "Optimierte Version", + "optimizationTarget": "Optimierungsziel", + "deletedAt": "Gelöscht", + "remoteSource": "Remote-Quelle", + "infiniteStream": "Endlos-Stream", + "directPlay": "Direct Play", + "directStream": "Direct Stream", + "transcoding": "Transkodierung", + "etag": "ETag", + "versionId": "Versions-ID", + "fileId": "Datei-ID", + "defaultAudioTrack": "Standard-Audiospur", + "defaultSubtitleTrack": "Standard-Untertitelspur", + "subtitlesOff": "Aus", + "flagDefault": "Standard", + "flagForced": "Erzwungen", + "flagSelected": "Ausgewählt", + "flagExternal": "Extern", + "flagHearingImpaired": "Für Hörgeschädigte", + "flagDub": "Dub", + "flagOriginal": "Original" }, "mediaMenu": { "markAsWatched": "Als gesehen markieren", @@ -524,35 +524,35 @@ "shufflePlay": "Zufallswiedergabe", "shuffleNotAvailableOffline": "Zufallswiedergabe ist offline nicht verfügbar", "fileInfo": "Dateiinfo", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Folge vom Server löschen", + "deleteSeasonFromServer": "Staffel vom Server löschen", + "deleteShowFromServer": "Serie vom Server löschen", + "deleteMovieFromServer": "Film vom Server löschen", + "deleteEpisodeTitle": "Diese Folge löschen?", + "deleteSeasonTitle": "Diese Staffel löschen?", + "deleteShowTitle": "Diese Serie löschen?", + "deleteMovieTitle": "Diesen Film löschen?", + "deleteEpisodeConfirm": "Folge löschen", + "deleteSeasonConfirm": "Staffel löschen", + "deleteShowConfirm": "Serie löschen", + "deleteMovieConfirm": "Film löschen", + "deleteAnyway": "Trotzdem löschen", + "confirmDeleteTarget": "„${title}“ dauerhaft von deinem Server löschen?", "deleteMultipleWarning": "Dies umfasst alle Episoden und deren Dateien.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Dies löscht alle ${n} Folge darin sowie ihre Datei.", + "other": "Dies löscht alle ${n} Folgen darin sowie ihre Dateien." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Dieses Element ist als ${n} Datei gespeichert, die gelöscht wird.", + "other": "Dieses Element ist über ${n} Dateien verteilt gespeichert, die alle gelöscht werden." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} weitere Folge ist in derselben Datei gespeichert und wird ebenfalls gelöscht:", + "other": "${n} weitere Folgen sind in derselben Datei gespeichert und werden ebenfalls gelöscht:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy konnte nicht prüfen, welche Dateien dadurch entfernt werden. Es könnte also mehr gelöscht werden als das oben genannte Element. Brich ab und versuche es erneut, oder lösche trotzdem.", + "deleteScopeUnverifiedNoFileInfo": "Dein Server hat für dieses Element keine Dateidetails bereitgestellt, daher kann Plezy nicht prüfen, welche Dateien entfernt werden. Es könnte mehr gelöscht werden als das oben genannte Element.", "mediaDeletedSuccessfully": "Medienelement gelöscht", "mediaFailedToDelete": "Medienelement konnte nicht gelöscht werden", "rate": "Bewerten", @@ -628,9 +628,9 @@ "playNext": "Nächstes abspielen", "playButton": "Abspielen", "pauseButton": "Pause", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Pausiert", + "playbackResumed": "Wird abgespielt", + "loadingVideo": "Video wird geladen", "showPlaybackControls": "Wiedergabesteuerung anzeigen", "hidePlaybackControls": "Wiedergabesteuerung ausblenden", "seekBackwardButton": "${seconds} Sekunden zurück", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Aus „Weiterschauen“ entfernt", "errorLoading": "Fehler: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Einige Medienserver konnten nicht durchsucht werden. Verfügbare Ergebnisse werden angezeigt.", "streamInterrupted": "Der Stream wurde unterbrochen. Drücke auf Wiedergabe oder spule, um es erneut zu versuchen.", "liveStreamInterrupted": "Der Livestream wurde unterbrochen. Drücke auf Wiedergabe, um es erneut zu versuchen.", "fileInfoNotAvailable": "Dateiinfo nicht verfügbar", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Wechsel zu einem kompatiblen Player …", "serverLimitTitle": "Wiedergabe fehlgeschlagen", "serverLimitBody": "Serverfehler (HTTP 500). Vermutlich hat ein Bandbreiten- oder Transkodierungslimit diese Sitzung abgelehnt. Bitte den Besitzer, das Limit anzupassen.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Datei nicht verfügbar", + "mediaUnreadableBody": "Der Server hat dieses Element gefunden, konnte seine Datei aber nicht lesen (HTTP 404). Die Datei wurde wahrscheinlich verschoben oder gelöscht, oder ihr Speicher ist offline. Bitte den Serverbesitzer, die Datei zu prüfen und die Mediathek neu zu scannen.", "logsUploaded": "Protokolle hochgeladen", "logsUploadFailed": "Protokolle konnten nicht hochgeladen werden", "logId": "Protokoll-ID" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Sitzung für ${name} abgelaufen", "sessionExpiredMany": "Sitzungen für ${count} Server abgelaufen", "signInAgain": "Erneut anmelden", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Verbindung zu ${product} bearbeiten", + "editMediaBrowserIntro": "URLs für ${serverName} hinzufügen oder entfernen. Plezy verwendet die erreichbare URL mit der geringsten Latenz." }, "discover": { "title": "Entdecken", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Suche fehlgeschlagen: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Die Suche konnte keinen Medienserver erreichen.", "connectionTimeout": "Zeitüberschreitung beim Laden von ${context}", "connectionFailed": "Keine Verbindung zum Medienserver möglich", "unableToLoad": "${context} konnte nicht geladen werden. Bitte erneut versuchen.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Protokolle hochladen" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy konnte nicht gestartet werden", + "failedBody": "Beim Start ist etwas schiefgelaufen. Die Details unten zeigen, was fehlgeschlagen ist.", + "failedBodyRepairable": "Die gespeicherte Einstellungsdatei von Plezy ist beschädigt und muss neu aufgebaut werden, bevor Plezy starten kann. Erneutes Versuchen hilft nicht – wähle „Speicher reparieren“.", + "phaseLabel": "Schritt", + "showDetails": "Details anzeigen", + "hideDetails": "Details ausblenden", + "copyDetails": "Details kopieren", + "detailsCopied": "Details in die Zwischenablage kopiert", + "uploadDetails": "Details hochladen", + "repairStorage": "Speicher reparieren", + "repairTitle": "Gespeicherte Daten reparieren?", + "repairBodyCommon": "Die Einstellungsdatei von Plezy ist beschädigt und kann nicht gelesen werden. Beim Reparieren werden alle Einstellungen auf ihre Standardwerte zurückgesetzt.", + "repairBodyOneCredential": "Eine gespeicherte Anmeldung ist beschädigt und kann nicht gelesen werden. Beim Reparieren wird nur diese entfernt; deine übrigen Einstellungen bleiben unangetastet.", + "repairBodySignInsKept": "Deine Server und Profile sollten angemeldet bleiben.", + "repairBodySignInsLost": "Der Schlüssel, der deine gespeicherten Anmeldungen schützt, kann aus dieser Datei nicht wiederhergestellt werden. Du musst dich daher bei jedem Server und Profil erneut anmelden. Auf deinem Medienserver ändert sich nichts.", + "repairBodySessionsUncertain": "Tracker (MAL, AniList, Simkl, Trakt) und Seerr werden separat gespeichert und können erhalten bleiben oder auch nicht. Plezy teilt dir genau mit, was erhalten blieb.", + "repairConfirm": "Reparieren", + "repairSucceeded": "Speicher repariert", + "repairNeedsRestart": "Speicher repariert – Neustart erforderlich", + "restartRequiredBody": "Deine Daten wurden repariert, aber Plezy muss neu starten, bevor es sie verwenden kann. Schließe Plezy und öffne es erneut.", + "quitPlezy": "Plezy beenden", + "repairFailed": "Reparatur fehlgeschlagen", + "repairKeptSignIns": "Deine Server und Profile sind weiterhin angemeldet.", + "repairLostSignIns": "Der Schlüssel, der deine gespeicherten Anmeldungen schützt, konnte nicht wiederhergestellt werden. Du musst dich bei jedem Server und Profil erneut anmelden.", + "repairLostSessions": "Mindestens eine Tracker- oder Seerr-Verbindung ging verloren und muss neu verbunden werden.", + "backupTitle": "Eine Kopie der beschädigten Datei wurde aufbewahrt", + "backupWarning": "Sie enthält deine Anmeldedaten. Lade sie nicht hoch und teile sie nicht.", + "deleteBackup": "Kopie löschen", + "backupDeleted": "Kopie gelöscht.", + "previousFailureTitle": "Plezy konnte beim letzten Mal nicht starten" }, "licenses": { "relatedPackages": "Verwandte Pakete", @@ -1107,134 +1107,134 @@ "searchPrompt": "Suche nach Filmen und Serien auf ${source}.", "searchFailed": "Suche fehlgeschlagen. Prüfe deine Verbindung und versuche es erneut.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} beliebt", + "rankAiring": "#${n} derzeit ausgestrahlt", + "rankRated": "#${n} bewertet", + "rankFavorited": "#${n} favorisiert", + "rankTrending": "#${n} angesagt", + "rankSeasonal": "#${n} in ${season}", + "watchingNow": "${n} schauen gerade", + "available": "Verfügbar", + "partiallyAvailable": "Teilweise verfügbar", + "availableIn4k": "4K verfügbar", + "requested": "Angefragt", + "pendingApproval": "Genehmigung ausstehend", + "processing": "Wird verarbeitet", + "declined": "Abgelehnt", + "requestFailed": "Anfrage fehlgeschlagen", + "requested4k": "4K angefragt", + "seasonsAvailable": "${available}/${total} Staffeln", + "nextEpisodeIn": "Folge ${episode} in ${duration}", + "nextAiringIn": "Nächste in ${duration}", + "episodesShort": "${n} Folgen", + "minutesPerEpisode": "${n} Min./Folge", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} gelistet", + "viewersDay": "${n} heute gesehen", + "viewersWeek": "${n} diese Woche gesehen", + "viewersMonth": "${n} diesen Monat gesehen", + "viewersYear": "${n} dieses Jahr gesehen", + "viewersAllTime": "${n} Zuschauer", + "planning": "${n} haben es geplant", + "favorited": "${n} Favoriten", + "dropRate": "${percent} haben es abgebrochen", "comments": { - "one": "", - "other": "" + "one": "${n} Kommentar", + "other": "${n} Kommentare" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} Stimmen", + "watching": "${n} schauen es gerade", + "completed": "${n} abgeschlossen", + "onHold": "${n} pausiert", + "dropped": "${n} abgebrochen" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Winter", + "spring": "Frühling", + "summer": "Sommer", + "fall": "Herbst", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV-Kurzfilm", + "movie": "Film", + "special": "Special", + "ova": "OVA", + "ona": "ONA", + "music": "Musik", + "other": "Sonstiges" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Original", + "manga": "Manga", + "lightNovel": "Light Novel", + "novel": "Roman", + "visualNovel": "Visual Novel", + "game": "Spiel", + "webComic": "Webcomic", + "musicRelease": "Musik", + "otherMedia": "Sonstiges" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Regisseur", + "writer": "Autor", + "producer": "Produzent", + "creator": "Schöpfer", + "composer": "Komponist" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Fortsetzung", + "sideStory": "Nebengeschichte", + "spinOff": "Spin-off", + "alternativeVersion": "Alternative Version", + "summary": "Zusammenfassung", + "parentStory": "Hauptgeschichte", + "adaptation": "Adaption", + "other": "Verwandt" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Läuft ${day} um ${time}", + "broadcastWithZone": "Läuft ${day} um ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Originaltitel", + "alsoKnownAs": "Auch bekannt als", + "studios": "Studios", + "country": "Land", + "language": "Sprache", + "released": "Erschienen", + "physicalRelease": "Auf Disc", + "ended": "Beendet", + "addedOn": "Hinzugefügt am ${date}", + "yourRating": "Deine Bewertung", + "budget": "Budget", + "revenue": "Einspielergebnis", + "contentAdvisory": "Altersfreigabe", + "tags": "Tags", + "revealSpoilerTags": "Spoiler-Tags anzeigen", + "links": "Links", + "watchOn": "Ansehen auf", + "watchTrailer": "Trailer ansehen", + "openOn": "Auf ${site} öffnen", + "crew": "Crew", + "ratings": "Bewertungen", + "schedule": "Sendetermine", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Von ${n} Nutzer empfohlen", + "other": "Von ${n} Nutzern empfohlen" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Empfohlen von ${who}", + "favoritedBy": "Favorisiert von ${who}", + "unairedEpisodes": "${n} noch nicht ausgestrahlt", + "recommendedByPercent": "Von ${percent} der Zuschauer empfohlen", + "relatedTitles": "Verwandte Titel", + "background": "Hintergrund" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} Ergebnis", + "other": "${n} Ergebnisse" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Synchronisierungsregel bearbeiten", "removeSyncRule": "Synchronisierungsregel entfernen", "removeSyncRuleConfirm": "Synchronisierung von „${title}“ beenden? Heruntergeladene Episoden werden behalten.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "„${title}“ nicht mehr synchronisieren?", + "deleteSyncRuleDownloads": "Zugehörige Downloads ebenfalls löschen", + "deleteSyncRuleDownloadsDescription": "Downloads, die von einer anderen Synchronisierungsregel oder einem Profil verwendet werden, bleiben erhalten.", "syncRuleCreated": "Synchronisierungsregel erstellt – ${count} ungesehene Episoden werden behalten", "syncRuleUpdated": "Synchronisierungsregel aktualisiert", "syncRuleRemoved": "Synchronisierungsregel entfernt", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Synchronisierungsregel und zugehörige Downloads entfernt", + "syncRuleCleanupBusy": "Synchronisierungsregeln werden gerade aktualisiert. Versuche es gleich noch einmal.", + "syncRuleCleanupUnavailable": "Zugehörige Downloads konnten nicht sicher ermittelt werden. Verbinde den Server erneut und versuche es noch einmal, oder entferne die Regel, ohne die Downloads zu löschen.", "syncedNewEpisodes": "${count} neue Episoden für ${title} synchronisiert", "activeSyncRules": "Synchronisierungsregeln", "noSyncRules": "Keine Synchronisierungsregeln", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Plezy auf ${service} aktivieren", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product}-Server hinzufügen", "serverUrls": "Server-URLs", "serverUrlsHelper": "Mehrere URLs möglich, durch Kommas getrennt.", "findServer": "Server finden", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Suche nach lokalen ${product}-Servern …", + "localMediaBrowserServers": "Lokale ${product}-Server", "username": "Benutzername", "password": "Passwort", "signIn": "Anmelden", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Mit Plex anmelden", "pinExpired": "PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.", "failedToRegisterAccount": "Konto konnte nicht registriert werden: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Gib die URL deines ${product}-Servers ein", "addConnectionTitle": "Verbindung hinzufügen", "addConnectionTitleScoped": "Zu ${name} hinzufügen", "signInWithPlexCard": "Mit Plex anmelden", "signInWithPlexCardSubtitle": "Dieses Gerät autorisieren. Geteilte Server werden hinzugefügt.", "signInWithPlexCardSubtitleScoped": "Ein Plex-Konto autorisieren. Home-Benutzer werden zu Profilen.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Mit ${product} verbinden", + "connectToMediaBrowserCardSubtitle": "Gib Server-URL, Benutzername und Passwort ein.", + "connectToMediaBrowserCardSubtitleScoped": "Melde dich bei deinem ${product}-Server an. Wird mit ${name} verknüpft.", "borrowFromAnotherProfile": "Von einem anderen Profil ausleihen", "borrowFromAnotherProfileSubtitle": "Verbindung eines anderen Profils wiederverwenden. PIN-geschützte Profile erfordern eine PIN." } diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index 6b01545d..41858282 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Esperando autenticación...\nInicia sesión desde tu navegador.", "useBrowser": "Usar navegador", "or": "o", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Conectar a ${product}", "useQuickConnect": "Usar Quick Connect", "quickConnectInstructions": "Abre Quick Connect en Jellyfin e introduce este código.", "quickConnectWaiting": "Esperando aprobación…", @@ -66,17 +66,17 @@ "exitFullscreen": "Salir de pantalla completa", "pressBackAgainToExit": "Pulsa Atrás de nuevo para salir", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Críticos", + "audience": "Público", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Críticos de Rotten Tomatoes", + "rottenTomatoesAudience": "Público de Rotten Tomatoes" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Oscuro", "oledTheme": "OLED", "libraryDensity": "Densidad de la biblioteca", - "displayScale": "", + "displayScale": "Escala de visualización", "compact": "Compacto", "comfortable": "Cómodo", "tvCornerSpotlightBackdrop": "Imagen destacada en la esquina", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "Automático (recomendado)", "bufferSizeWarning": "${heap} MB de memoria disponible. Un búfer de ${size} MB puede afectar a la reproducción.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Búfer de reproducción", + "playbackBufferAuto": "Automático (recomendado)", + "playbackBufferLarge": "Grande", + "playbackBufferExtraLarge": "Extra grande", + "playbackBufferDescription": "Almacena más en búfer para conexiones inestables. También limitado por el tamaño del búfer.", "defaultQualityTitle": "Calidad predeterminada", "musicQualityTitle": "Calidad de música", "subtitleStyling": "Estilo de subtítulos", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Habilitar registros detallados para solucionar problemas", "viewLogs": "Ver registros", "viewLogsDescription": "Ver los registros de la aplicación", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Vaciar caché de imágenes", + "clearImageCacheDescription": "Borra las carátulas y miniaturas guardadas en caché. Las imágenes pueden tardar más en cargar hasta que se descarguen de nuevo.", + "clearImageCacheSuccess": "Caché de imágenes vaciada correctamente", "resetSettings": "Restablecer configuración", "resetSettingsDescription": "Restaurar ajustes predeterminados. No se puede deshacer.", "resetSettingsSuccess": "Configuración restablecida con éxito", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Información del archivo", - "overview": "", + "overview": "Resumen", "video": "Video", "audio": "Audio", "subtitles": "Subtítulos", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Imágenes incrustadas", + "dataStreams": "Flujos de datos", + "lyrics": "Letras", "file": "Archivo", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Archivos adjuntos", + "delivery": "Entrega", + "versionCounter": "Versión ${index} de ${count}", + "fileCounter": "Archivo ${index} de ${count}", + "noStreams": "El servidor no informó de ningún flujo para este archivo.", + "copyPath": "Copiar ruta", + "pathCopied": "Ruta del archivo copiada", "codec": "Códec", - "codecTag": "", + "codecTag": "Etiqueta de códec", "resolution": "Resolución", - "codedResolution": "", + "codedResolution": "Resolución codificada", "bitrate": "Tasa de bits", "frameRate": "Frecuencia de fotogramas", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotación", + "comment": "Comentario", + "audioDescription": "Audiodescripción", + "headerCompression": "Compresión de cabecera", + "sidecarFile": "Archivo auxiliar", + "transportTimestamp": "Marca de tiempo de transporte", + "displayOffset": "Desplazamiento de visualización", + "previewFailureCode": "Código de error de vista previa", + "previewRetries": "Reintentos de vista previa", "aspectRatio": "Relación de aspecto", - "pixelAspectRatio": "", + "pixelAspectRatio": "Relación de aspecto de píxel", "profile": "Perfil", - "level": "", + "level": "Nivel", "bitDepth": "Profundidad de bits", - "pixelFormat": "", + "pixelFormat": "Formato de píxel", "colorSpace": "Espacio de color", "colorRange": "Rango de color", "colorPrimaries": "Primarias de color", - "colorTransfer": "", + "colorTransfer": "Transferencia de color", "chromaSubsampling": "Submuestreo de croma", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Ubicación de crominancia", + "scanType": "Tipo de escaneo", + "interlaced": "Entrelazado", + "anamorphic": "Anamórfico", + "referenceFrames": "Fotogramas de referencia", + "dynamicRange": "Rango dinámico", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Nivel de Dolby Vision", + "dolbyVisionVersion": "Versión de Dolby Vision", + "dolbyVisionLayers": "Capas de Dolby Vision", + "baseLayerCompatibility": "Compatibilidad de capa base", + "avcBitstream": "Flujo de bits AVC", + "nalLengthSize": "Tamaño de longitud NAL", + "scalingMatrix": "Matriz de escalado personalizada", + "streamIdentifier": "Identificador de flujo", + "streamIndex": "Índice de flujo", + "streamId": "ID de flujo", + "language": "Idioma", + "languageCode": "Código de idioma", + "streamTitle": "Título de la pista", "channels": "Canales", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Frecuencia de muestreo", + "spatialAudio": "Audio espacial", + "textBased": "Basado en texto", + "subtitleFormat": "Formato de archivo auxiliar", + "provider": "Proveedor", + "matchScore": "Puntuación de coincidencia", + "externalDelivery": "Puede servirse por separado", + "sidecarPath": "Ruta del archivo auxiliar", + "sourceStream": "Copiado de", + "temporary": "Temporal", + "timeBase": "Base de tiempo", "overallBitrate": "Tasa de bits total", "path": "Ruta", - "fileName": "", + "fileName": "Nombre de archivo", "size": "Tamaño", - "totalSize": "", + "totalSize": "Tamaño total", "container": "Contenedor", "duration": "Duración", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Miniaturas de vista previa", + "previewIndex": "Índice de vista previa", + "packetLength": "Longitud del paquete", + "filePresent": "Archivo presente", + "fileReadable": "Legible por el servidor", + "streamPath": "Ruta del flujo", "optimizedForStreaming": "Optimizado para transmisión", "has64bitOffsets": "Desplazamientos de 64 bits", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protocolo", + "mediaType": "Tipo de medio", + "sourceKind": "Tipo de origen", + "optimizedVersion": "Versión optimizada", + "optimizationTarget": "Destino de optimización", + "deletedAt": "Eliminado", + "remoteSource": "Origen remoto", + "infiniteStream": "Flujo infinito", + "directPlay": "Reproducción directa", + "directStream": "Flujo directo", + "transcoding": "Transcodificación", + "etag": "ETag", + "versionId": "ID de versión", + "fileId": "ID de archivo", + "defaultAudioTrack": "Pista de audio predeterminada", + "defaultSubtitleTrack": "Pista de subtítulos predeterminada", + "subtitlesOff": "Desactivados", + "flagDefault": "Predeterminada", + "flagForced": "Forzada", + "flagSelected": "Seleccionada", + "flagExternal": "Externa", + "flagHearingImpaired": "Para personas con discapacidad auditiva", + "flagDub": "Doblaje", + "flagOriginal": "Original" }, "mediaMenu": { "markAsWatched": "Marcar como visto", @@ -524,35 +524,35 @@ "shufflePlay": "Reproducción aleatoria", "shuffleNotAvailableOffline": "La reproducción aleatoria no está disponible sin conexión", "fileInfo": "Información del archivo", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Eliminar el episodio del servidor", + "deleteSeasonFromServer": "Eliminar la temporada del servidor", + "deleteShowFromServer": "Eliminar la serie del servidor", + "deleteMovieFromServer": "Eliminar la película del servidor", + "deleteEpisodeTitle": "¿Eliminar este episodio?", + "deleteSeasonTitle": "¿Eliminar esta temporada?", + "deleteShowTitle": "¿Eliminar esta serie?", + "deleteMovieTitle": "¿Eliminar esta película?", + "deleteEpisodeConfirm": "Eliminar episodio", + "deleteSeasonConfirm": "Eliminar temporada", + "deleteShowConfirm": "Eliminar serie", + "deleteMovieConfirm": "Eliminar película", + "deleteAnyway": "Eliminar de todos modos", + "confirmDeleteTarget": "¿Eliminar definitivamente ${title} de tu servidor?", "deleteMultipleWarning": "Esto incluye todos los episodios y sus archivos.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Esto elimina el único episodio que contiene y su archivo.", + "other": "Esto elimina los ${n} episodios que contiene y sus archivos." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Este elemento se almacena en ${n} archivo, que se eliminará.", + "other": "Este elemento se almacena en ${n} archivos, y todos se eliminarán." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} episodio más se almacena en el mismo archivo y también se eliminará:", + "other": "${n} episodios más se almacenan en el mismo archivo y también se eliminarán:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy no pudo comprobar qué archivos se eliminarán, por lo que podría borrar más de lo indicado arriba. Cancela y vuelve a intentarlo, o elimina de todos modos.", + "deleteScopeUnverifiedNoFileInfo": "Tu servidor no proporcionó los detalles del archivo de este elemento, por lo que Plezy no puede comprobar qué archivos se eliminarán. Podría borrar más de lo indicado arriba.", "mediaDeletedSuccessfully": "Elemento multimedia eliminado con éxito", "mediaFailedToDelete": "Error al eliminar el elemento multimedia", "rate": "Calificar", @@ -628,9 +628,9 @@ "playNext": "Reproducir siguiente", "playButton": "Reproducir", "pauseButton": "Pausar", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "En pausa", + "playbackResumed": "Reproduciendo", + "loadingVideo": "Cargando el vídeo", "showPlaybackControls": "Mostrar controles de reproducción", "hidePlaybackControls": "Ocultar controles de reproducción", "seekBackwardButton": "Retroceder ${seconds} segundos", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Eliminado de Seguir Viendo", "errorLoading": "Error: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Algunos servidores de medios no se pudieron buscar. Se muestran los resultados disponibles.", "streamInterrupted": "La reproducción se interrumpió. Pulsa reproducir o avanza para volver a intentarlo.", "liveStreamInterrupted": "La transmisión en vivo se interrumpió. Pulsa reproducir para volver a intentarlo.", "fileInfoNotAvailable": "Información de archivo no disponible", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Cambiando a reproductor compatible...", "serverLimitTitle": "Error de reproducción", "serverLimitBody": "Error del servidor (HTTP 500). Un límite de ancho de banda/transcodificación probablemente rechazó esta sesión. Pide al propietario que lo ajuste.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Archivo no disponible", + "mediaUnreadableBody": "El servidor encontró este elemento pero no pudo leer su archivo (HTTP 404). Es probable que el archivo se haya movido o eliminado, o que su almacenamiento esté sin conexión. Pide al propietario del servidor que revise el archivo y vuelva a escanear la biblioteca.", "logsUploaded": "Registros subidos", "logsUploadFailed": "Error al subir registros", "logId": "ID de registro" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Sesión caducada para ${name}", "sessionExpiredMany": "Sesión caducada para ${count} servidores", "signInAgain": "Iniciar sesión de nuevo", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Editar conexión de ${product}", + "editMediaBrowserIntro": "Añade o elimina URL para ${serverName}. Plezy usará la URL accesible con menor latencia." }, "discover": { "title": "Descubrir", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Error en la búsqueda: ${error}", - "searchUnavailable": "", + "searchUnavailable": "La búsqueda no pudo alcanzar ningún servidor de medios.", "connectionTimeout": "Tiempo de conexión agotado al cargar ${context}", "connectionFailed": "No se puede conectar al servidor multimedia", "unableToLoad": "No se pudo cargar ${context}. Inténtalo de nuevo.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Subir registros" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy no pudo iniciarse", + "failedBody": "Algo salió mal durante el inicio. Los detalles de abajo indican qué ha fallado.", + "failedBodyRepairable": "El archivo de ajustes guardados de Plezy está dañado y debe reconstruirse antes de que Plezy pueda iniciarse. Reintentar no servirá: elige Reparar almacenamiento.", + "phaseLabel": "Paso", + "showDetails": "Mostrar detalles", + "hideDetails": "Ocultar detalles", + "copyDetails": "Copiar detalles", + "detailsCopied": "Detalles copiados al portapapeles", + "uploadDetails": "Subir detalles", + "repairStorage": "Reparar almacenamiento", + "repairTitle": "¿Reparar los datos guardados?", + "repairBodyCommon": "El archivo de ajustes de Plezy está dañado y no puede leerse. La reparación restablece todos los ajustes a sus valores predeterminados.", + "repairBodyOneCredential": "Un inicio de sesión guardado está dañado y no puede leerse. La reparación elimina solo ese; el resto de tus ajustes se mantienen intactos.", + "repairBodySignInsKept": "Tus servidores y perfiles deberían permanecer con la sesión iniciada.", + "repairBodySignInsLost": "La clave que protege tus inicios de sesión guardados no se puede recuperar de este archivo, por lo que tendrás que iniciar sesión de nuevo en cada servidor y perfil. Nada en tu servidor de medios se ve afectado.", + "repairBodySessionsUncertain": "Los rastreadores (MAL, AniList, Simkl, Trakt) y Seerr se guardan por separado y pueden sobrevivir o no. Plezy te dirá exactamente qué ha conservado.", + "repairConfirm": "Reparar", + "repairSucceeded": "Almacenamiento reparado", + "repairNeedsRestart": "Almacenamiento reparado: es necesario reiniciar", + "restartRequiredBody": "Tus datos se repararon, pero Plezy debe iniciarse de nuevo antes de poder usarlos. Cierra Plezy y ábrelo otra vez.", + "quitPlezy": "Salir de Plezy", + "repairFailed": "Error en la reparación", + "repairKeptSignIns": "Tus servidores y perfiles siguen con la sesión iniciada.", + "repairLostSignIns": "La clave que protege tus inicios de sesión guardados no se pudo recuperar. Tendrás que iniciar sesión de nuevo en cada servidor y perfil.", + "repairLostSessions": "Se perdió al menos una conexión de rastreador o de Seerr y hay que volver a conectarla.", + "backupTitle": "Se ha guardado una copia del archivo dañado", + "backupWarning": "Contiene tus credenciales de inicio de sesión. No la subas ni la compartas.", + "deleteBackup": "Eliminar copia", + "backupDeleted": "Copia eliminada.", + "previousFailureTitle": "Plezy no se inició la última vez" }, "licenses": { "relatedPackages": "Paquetes relacionados", @@ -1107,134 +1107,134 @@ "searchPrompt": "Busca películas y series en ${source}.", "searchFailed": "La búsqueda falló. Comprueba tu conexión e inténtalo de nuevo.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} popular", + "rankAiring": "#${n} en emisión", + "rankRated": "#${n} puntuado", + "rankFavorited": "#${n} favorito", + "rankTrending": "#${n} en tendencia", + "rankSeasonal": "#${n} en ${season}", + "watchingNow": "${n} viendo", + "available": "Disponible", + "partiallyAvailable": "Parcialmente disponible", + "availableIn4k": "Disponible en 4K", + "requested": "Solicitado", + "pendingApproval": "Pendiente de aprobación", + "processing": "Procesando", + "declined": "Rechazado", + "requestFailed": "La solicitud falló", + "requested4k": "Solicitado en 4K", + "seasonsAvailable": "${available}/${total} temporadas", + "nextEpisodeIn": "Ep. ${episode} en ${duration}", + "nextAiringIn": "Siguiente en ${duration}", + "episodesShort": "${n} eps", + "minutesPerEpisode": "${n} min/ep", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} registrados", + "viewersDay": "${n} vistos hoy", + "viewersWeek": "${n} vistos esta semana", + "viewersMonth": "${n} vistos este mes", + "viewersYear": "${n} vistos este año", + "viewersAllTime": "${n} espectadores", + "planning": "${n} tienen previsto verlo", + "favorited": "${n} favoritos", + "dropRate": "${percent} lo abandonaron", "comments": { - "one": "", - "other": "" + "one": "${n} comentario", + "other": "${n} comentarios" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} votos", + "watching": "${n} lo están viendo", + "completed": "${n} lo completaron", + "onHold": "${n} en pausa", + "dropped": "${n} lo abandonaron" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Invierno", + "spring": "Primavera", + "summer": "Verano", + "fall": "Otoño", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "Corto de TV", + "movie": "Película", + "special": "Especial", + "ova": "OVA", + "ona": "ONA", + "music": "Música", + "other": "Otro" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Original", + "manga": "Manga", + "lightNovel": "Novela ligera", + "novel": "Novela", + "visualNovel": "Novela visual", + "game": "Juego", + "webComic": "Cómic web", + "musicRelease": "Música", + "otherMedia": "Otro" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Director", + "writer": "Guionista", + "producer": "Productor", + "creator": "Creador", + "composer": "Compositor" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Precuela", + "sequel": "Secuela", + "sideStory": "Historia paralela", + "spinOff": "Spin-off", + "alternativeVersion": "Versión alternativa", + "summary": "Resumen", + "parentStory": "Historia principal", + "adaptation": "Adaptación", + "other": "Relacionado" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Se emite los ${day} a las ${time}", + "broadcastWithZone": "Se emite los ${day} a las ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Título original", + "alsoKnownAs": "También conocido como", + "studios": "Estudios", + "country": "País", + "language": "Idioma", + "released": "Estrenada", + "physicalRelease": "En disco", + "ended": "Finalizada", + "addedOn": "Añadida el ${date}", + "yourRating": "Tu valoración", + "budget": "Presupuesto", + "revenue": "Taquilla", + "contentAdvisory": "Orientación por edades", + "tags": "Etiquetas", + "revealSpoilerTags": "Mostrar etiquetas de spoilers", + "links": "Enlaces", + "watchOn": "Ver en", + "watchTrailer": "Ver tráiler", + "openOn": "Abrir en ${site}", + "crew": "Equipo", + "ratings": "Valoraciones", + "schedule": "Programación", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Recomendada por ${n} usuario", + "other": "Recomendada por ${n} usuarios" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Recomendada por ${who}", + "favoritedBy": "Marcada como favorita por ${who}", + "unairedEpisodes": "${n} sin estrenar", + "recommendedByPercent": "Recomendada por el ${percent} de los espectadores", + "relatedTitles": "Títulos relacionados", + "background": "Antecedentes" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} resultado", + "other": "${n} resultados" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Editar regla de sincronización", "removeSyncRule": "Eliminar regla de sincronización", "removeSyncRuleConfirm": "¿Dejar de sincronizar \"${title}\"? Los episodios descargados se conservarán.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "¿Dejar de sincronizar \"${title}\"?", + "deleteSyncRuleDownloads": "Eliminar también las descargas asociadas", + "deleteSyncRuleDownloadsDescription": "Se conservarán las descargas usadas por otra regla de sincronización o perfil.", "syncRuleCreated": "Regla de sincronización creada — se conservarán ${count} episodios no vistos", "syncRuleUpdated": "Regla de sincronización actualizada", "syncRuleRemoved": "Regla de sincronización eliminada", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Regla de sincronización y descargas asociadas eliminadas", + "syncRuleCleanupBusy": "Las reglas de sincronización se están actualizando. Inténtalo de nuevo en un momento.", + "syncRuleCleanupUnavailable": "No se pudieron identificar las descargas asociadas de forma segura. Vuelve a conectar el servidor e inténtalo de nuevo, o elimina la regla sin borrar las descargas.", "syncedNewEpisodes": "${count} nuevos episodios sincronizados para ${title}", "activeSyncRules": "Reglas de sincronización", "noSyncRules": "Sin reglas de sincronización", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Activar Plezy en ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Añadir servidor ${product}", "serverUrls": "Direcciones URL del servidor", "serverUrlsHelper": "Se permiten varias URL, separadas por comas.", "findServer": "Buscar servidor", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Buscando servidores ${product} locales...", + "localMediaBrowserServers": "Servidores ${product} locales", "username": "Usuario", "password": "Contraseña", "signIn": "Iniciar sesión", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Iniciar sesión con Plex", "pinExpired": "El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.", "failedToRegisterAccount": "No se pudo registrar la cuenta: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Introduce la URL de tu servidor ${product}", "addConnectionTitle": "Añadir conexión", "addConnectionTitleScoped": "Añadir a ${name}", "signInWithPlexCard": "Iniciar sesión con Plex", "signInWithPlexCardSubtitle": "Autoriza este dispositivo. Se añaden servidores compartidos.", "signInWithPlexCardSubtitleScoped": "Autoriza una cuenta Plex. Los usuarios de Home se convierten en perfiles.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Conectar a ${product}", + "connectToMediaBrowserCardSubtitle": "Introduce la URL de tu servidor, el nombre de usuario y la contraseña.", + "connectToMediaBrowserCardSubtitleScoped": "Inicia sesión en tu servidor ${product}. Se vincula a ${name}.", "borrowFromAnotherProfile": "Tomar prestado de otro perfil", "borrowFromAnotherProfileSubtitle": "Reutiliza la conexión de otro perfil. Los perfiles protegidos con PIN requieren un PIN." } diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index dd3d66f5..51bdfc07 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "En attente d'authentification...\nConnectez-vous depuis votre navigateur.", "useBrowser": "Utiliser le navigateur", "or": "ou", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Se connecter à ${product}", "useQuickConnect": "Utiliser Quick Connect", "quickConnectInstructions": "Ouvrez Quick Connect dans Jellyfin et saisissez ce code.", "quickConnectWaiting": "En attente d'approbation…", @@ -45,7 +45,7 @@ "pause": "Pause", "resume": "Reprendre", "error": "Erreur", - "search": "Rechercher", + "search": "Recherche", "home": "Accueil", "back": "Retour", "settings": "Paramètres", @@ -66,17 +66,17 @@ "exitFullscreen": "Quitter le plein écran", "pressBackAgainToExit": "Appuyez à nouveau sur retour pour quitter", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Critiques", + "audience": "Public", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Critiques Rotten Tomatoes", + "rottenTomatoesAudience": "Public Rotten Tomatoes" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Sombre", "oledTheme": "OLED", "libraryDensity": "Densité des bibliothèques", - "displayScale": "", + "displayScale": "Échelle d'affichage", "compact": "Compact", "comfortable": "Confortable", "tvCornerSpotlightBackdrop": "Illustration en vedette dans le coin", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} Mo", "bufferSizeAuto": "Automatique (recommandé)", "bufferSizeWarning": "${heap} Mo de mémoire disponible. Un tampon de ${size} Mo peut affecter la lecture.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Tampon de lecture", + "playbackBufferAuto": "Auto (recommandé)", + "playbackBufferLarge": "Grand", + "playbackBufferExtraLarge": "Très grand", + "playbackBufferDescription": "Tampon supplémentaire contre les connexions instables. Également limité par la taille du tampon.", "defaultQualityTitle": "Qualité par défaut", "musicQualityTitle": "Qualité de la musique", "subtitleStyling": "Style des sous-titres", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Activer la journalisation détaillée pour le dépannage", "viewLogs": "Voir les journaux", "viewLogsDescription": "Voir les journaux de l’application", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Vider le cache d'images", + "clearImageCacheDescription": "Vide les affiches et vignettes en cache. Les images peuvent se charger plus lentement jusqu'à leur prochain téléchargement.", + "clearImageCacheSuccess": "Cache d'images vidé avec succès", "resetSettings": "Réinitialiser les paramètres", "resetSettingsDescription": "Restaurer les paramètres par défaut. Action irréversible.", "resetSettingsSuccess": "Réinitialisation des paramètres réussie", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Informations sur le fichier", - "overview": "", + "overview": "Aperçu", "video": "Vidéo", "audio": "Audio", "subtitles": "Sous-titres", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Images intégrées", + "dataStreams": "Flux de données", + "lyrics": "Paroles", "file": "Fichier", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Pièces jointes", + "delivery": "Diffusion", + "versionCounter": "Version ${index} sur ${count}", + "fileCounter": "Fichier ${index} sur ${count}", + "noStreams": "Le serveur n'a signalé aucun flux pour ce fichier.", + "copyPath": "Copier le chemin", + "pathCopied": "Chemin du fichier copié", "codec": "Codec", - "codecTag": "", + "codecTag": "Balise de codec", "resolution": "Résolution", - "codedResolution": "", + "codedResolution": "Résolution codée", "bitrate": "Débit", "frameRate": "Fréquence d'images", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotation", + "comment": "Commentaire", + "audioDescription": "Audiodescription", + "headerCompression": "Compression d'en-tête", + "sidecarFile": "Fichier annexe", + "transportTimestamp": "Horodatage du transport", + "displayOffset": "Décalage d'affichage", + "previewFailureCode": "Code d'échec de l'aperçu", + "previewRetries": "Tentatives d'aperçu", "aspectRatio": "Format d'image", - "pixelAspectRatio": "", + "pixelAspectRatio": "Rapport d'aspect des pixels", "profile": "Profil", - "level": "", + "level": "Niveau", "bitDepth": "Profondeur de bits", - "pixelFormat": "", + "pixelFormat": "Format de pixels", "colorSpace": "Espace colorimétrique", "colorRange": "Gamme de couleurs", "colorPrimaries": "Couleurs primaires", - "colorTransfer": "", + "colorTransfer": "Transfert de couleur", "chromaSubsampling": "Sous-échantillonnage chromatique", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Position du chroma", + "scanType": "Type de balayage", + "interlaced": "Entrelacé", + "anamorphic": "Anamorphique", + "referenceFrames": "Images de référence", + "dynamicRange": "Plage dynamique", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Niveau Dolby Vision", + "dolbyVisionVersion": "Version Dolby Vision", + "dolbyVisionLayers": "Couches Dolby Vision", + "baseLayerCompatibility": "Compatibilité de la couche de base", + "avcBitstream": "Flux binaire AVC", + "nalLengthSize": "Taille de longueur NAL", + "scalingMatrix": "Matrice de mise à l'échelle personnalisée", + "streamIdentifier": "Identifiant de flux", + "streamIndex": "Index de flux", + "streamId": "ID de flux", + "language": "Langue", + "languageCode": "Code de langue", + "streamTitle": "Titre de la piste", "channels": "Canaux", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Fréquence d'échantillonnage", + "spatialAudio": "Audio spatial", + "textBased": "Basé sur du texte", + "subtitleFormat": "Format annexe", + "provider": "Fournisseur", + "matchScore": "Score de correspondance", + "externalDelivery": "Peut être diffusé séparément", + "sidecarPath": "Chemin du fichier annexe", + "sourceStream": "Copié depuis", + "temporary": "Temporaire", + "timeBase": "Base de temps", "overallBitrate": "Débit global", "path": "Chemin", - "fileName": "", + "fileName": "Nom du fichier", "size": "Taille", - "totalSize": "", + "totalSize": "Taille totale", "container": "Conteneur", "duration": "Durée", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Vignettes d'aperçu", + "previewIndex": "Index d'aperçu", + "packetLength": "Longueur du paquet", + "filePresent": "Fichier présent", + "fileReadable": "Lisible par le serveur", + "streamPath": "Chemin du flux", "optimizedForStreaming": "Optimisé pour le streaming", "has64bitOffsets": "Décalages 64 bits", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protocole", + "mediaType": "Type de média", + "sourceKind": "Type de source", + "optimizedVersion": "Version optimisée", + "optimizationTarget": "Cible d'optimisation", + "deletedAt": "Supprimé", + "remoteSource": "Source distante", + "infiniteStream": "Flux infini", + "directPlay": "Lecture directe", + "directStream": "Flux direct", + "transcoding": "Transcodage", + "etag": "ETag", + "versionId": "ID de version", + "fileId": "ID de fichier", + "defaultAudioTrack": "Piste audio par défaut", + "defaultSubtitleTrack": "Piste de sous-titres par défaut", + "subtitlesOff": "Désactivés", + "flagDefault": "Par défaut", + "flagForced": "Forcé", + "flagSelected": "Sélectionné", + "flagExternal": "Externe", + "flagHearingImpaired": "Sourds et malentendants", + "flagDub": "Doublage", + "flagOriginal": "Originale" }, "mediaMenu": { "markAsWatched": "Marquer comme vu", @@ -524,35 +524,35 @@ "shufflePlay": "Lecture aléatoire", "shuffleNotAvailableOffline": "La lecture aléatoire n’est pas disponible hors ligne", "fileInfo": "Informations sur le fichier", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Supprimer l'épisode du serveur", + "deleteSeasonFromServer": "Supprimer la saison du serveur", + "deleteShowFromServer": "Supprimer la série du serveur", + "deleteMovieFromServer": "Supprimer le film du serveur", + "deleteEpisodeTitle": "Supprimer cet épisode ?", + "deleteSeasonTitle": "Supprimer cette saison ?", + "deleteShowTitle": "Supprimer cette série ?", + "deleteMovieTitle": "Supprimer ce film ?", + "deleteEpisodeConfirm": "Supprimer l'épisode", + "deleteSeasonConfirm": "Supprimer la saison", + "deleteShowConfirm": "Supprimer la série", + "deleteMovieConfirm": "Supprimer le film", + "deleteAnyway": "Supprimer quand même", + "confirmDeleteTarget": "Supprimer définitivement ${title} de votre serveur ?", "deleteMultipleWarning": "Cela inclut tous les épisodes et leurs fichiers.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Cela supprime ${n} épisode qu'elle contient, ainsi que son fichier.", + "other": "Cela supprime les ${n} épisodes qu'elle contient, ainsi que leurs fichiers." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Cet élément est stocké sous forme de ${n} fichier, qui sera supprimé.", + "other": "Cet élément est stocké sur ${n} fichiers, et ils seront tous supprimés." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} autre épisode est stocké dans le même fichier et sera également supprimé :", + "other": "${n} autres épisodes sont stockés dans le même fichier et seront également supprimés :" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy n'a pas pu vérifier quels fichiers seront supprimés ; il risque donc d'en supprimer plus que l'élément nommé ci-dessus. Annulez et réessayez, ou supprimez quand même.", + "deleteScopeUnverifiedNoFileInfo": "Votre serveur n'a pas fourni les détails du fichier pour cet élément, Plezy ne peut donc pas vérifier quels fichiers seront supprimés. Il risque d'en supprimer plus que l'élément nommé ci-dessus.", "mediaDeletedSuccessfully": "Élément média supprimé avec succès", "mediaFailedToDelete": "Échec de la suppression de l'élément média", "rate": "Noter", @@ -628,9 +628,9 @@ "playNext": "Lire l'épisode suivant", "playButton": "Lire", "pauseButton": "Pause", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "En pause", + "playbackResumed": "En lecture", + "loadingVideo": "Chargement de la vidéo", "showPlaybackControls": "Afficher les commandes de lecture", "hidePlaybackControls": "Masquer les commandes de lecture", "seekBackwardButton": "Reculer de ${seconds} secondes", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Supprimé de « Continuer à regarder »", "errorLoading": "Erreur : ${error}", - "searchPartialResults": "", + "searchPartialResults": "Certains serveurs multimédia n'ont pas pu être interrogés. Affichage des résultats disponibles.", "streamInterrupted": "La lecture a été interrompue. Appuyez sur Lecture ou avancez pour réessayer.", "liveStreamInterrupted": "Le direct a été interrompu. Appuyez sur Lecture pour réessayer.", "fileInfoNotAvailable": "Informations sur le fichier non disponibles", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Passage au lecteur compatible...", "serverLimitTitle": "Échec de la lecture", "serverLimitBody": "Erreur serveur (HTTP 500). Une limite de bande passante/transcodage a probablement rejeté cette session. Demandez au propriétaire de l'ajuster.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Fichier indisponible", + "mediaUnreadableBody": "Le serveur a trouvé cet élément mais n'a pas pu lire son fichier (HTTP 404). Le fichier a probablement été déplacé, supprimé, ou son stockage est hors ligne. Demandez au propriétaire du serveur de vérifier le fichier et de relancer l'analyse de la bibliothèque.", "logsUploaded": "Journaux envoyés", "logsUploadFailed": "Échec de l’envoi des journaux", "logId": "Identifiant du journal" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Session expirée pour ${name}", "sessionExpiredMany": "Session expirée pour ${count} serveurs", "signInAgain": "Se reconnecter", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Modifier la connexion ${product}", + "editMediaBrowserIntro": "Ajoutez ou retirez des URL pour ${serverName}. Plezy utilisera l'URL joignable avec la latence la plus faible." }, "discover": { "title": "Découvrir", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Échec de la recherche : ${error}", - "searchUnavailable": "", + "searchUnavailable": "La recherche n'a pu atteindre aucun serveur multimédia.", "connectionTimeout": "Délai d'attente de connexion dépassé pendant le chargement ${context}", "connectionFailed": "Impossible de se connecter au serveur multimédia", "unableToLoad": "Impossible de charger ${context}. Réessayez.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Envoyer les journaux" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy n'a pas pu démarrer", + "failedBody": "Une erreur s'est produite au démarrage. Les détails ci-dessous identifient la cause.", + "failedBodyRepairable": "Le fichier de paramètres enregistré de Plezy est endommagé et doit être reconstruit avant que Plezy ne puisse démarrer. Réessayer ne servira à rien — choisissez Réparer le stockage.", + "phaseLabel": "Étape", + "showDetails": "Afficher les détails", + "hideDetails": "Masquer les détails", + "copyDetails": "Copier les détails", + "detailsCopied": "Détails copiés dans le presse-papiers", + "uploadDetails": "Téléverser les détails", + "repairStorage": "Réparer le stockage", + "repairTitle": "Réparer les données stockées ?", + "repairBodyCommon": "Le fichier de paramètres de Plezy est endommagé et illisible. La réparation rétablit tous les paramètres par défaut.", + "repairBodyOneCredential": "Une connexion enregistrée est endommagée et illisible. La réparation ne supprime que celle-ci ; vos autres paramètres sont laissés intacts.", + "repairBodySignInsKept": "Vos serveurs et profils devraient rester connectés.", + "repairBodySignInsLost": "La clé qui protège vos connexions enregistrées ne peut pas être récupérée à partir de ce fichier ; vous devrez donc vous reconnecter à chaque serveur et profil. Rien sur votre serveur multimédia n'est affecté.", + "repairBodySessionsUncertain": "Les trackers (MAL, AniList, Simkl, Trakt) et Seerr sont stockés séparément et peuvent ou non être conservés. Plezy vous indiquera exactement ce qu'il a gardé.", + "repairConfirm": "Réparer", + "repairSucceeded": "Stockage réparé", + "repairNeedsRestart": "Stockage réparé — redémarrage requis", + "restartRequiredBody": "Vos données ont été réparées, mais Plezy doit redémarrer pour pouvoir les utiliser. Fermez Plezy puis rouvrez-le.", + "quitPlezy": "Quitter Plezy", + "repairFailed": "Échec de la réparation", + "repairKeptSignIns": "Vos serveurs et profils sont toujours connectés.", + "repairLostSignIns": "La clé qui protégeait vos connexions enregistrées n'a pas pu être récupérée. Vous devrez vous reconnecter à chaque serveur et profil.", + "repairLostSessions": "Au moins une connexion à un tracker ou à Seerr a été perdue et devra être rétablie.", + "backupTitle": "Une copie du fichier endommagé a été conservée", + "backupWarning": "Elle contient vos identifiants de connexion. Ne la téléversez pas et ne la partagez pas.", + "deleteBackup": "Supprimer la copie", + "backupDeleted": "Copie supprimée.", + "previousFailureTitle": "Plezy n'a pas réussi à démarrer la dernière fois" }, "licenses": { "relatedPackages": "Paquets associés", @@ -1058,8 +1058,8 @@ "licensesCount": "${count} licences" }, "navigation": { - "libraries": "Bibliothèques", - "downloads": "Téléchargements", + "libraries": "Bibliothèque", + "downloads": "Téléchargement", "liveTv": "TV en direct", "explore": "Explorer" }, @@ -1107,134 +1107,134 @@ "searchPrompt": "Recherchez des films et des séries sur ${source}.", "searchFailed": "Échec de la recherche. Vérifiez votre connexion et réessayez.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} populaire", + "rankAiring": "#${n} en diffusion", + "rankRated": "#${n} mieux noté", + "rankFavorited": "#${n} favoris", + "rankTrending": "#${n} tendance", + "rankSeasonal": "#${n} de ${season}", + "watchingNow": "${n} regardent", + "available": "Disponible", + "partiallyAvailable": "Partiellement disponible", + "availableIn4k": "4K disponible", + "requested": "Demandé", + "pendingApproval": "En attente d'approbation", + "processing": "En cours de traitement", + "declined": "Refusé", + "requestFailed": "Échec de la demande", + "requested4k": "4K demandé", + "seasonsAvailable": "${available}/${total} saisons", + "nextEpisodeIn": "Ép ${episode} dans ${duration}", + "nextAiringIn": "Prochain dans ${duration}", + "episodesShort": "${n} ép", + "minutesPerEpisode": "${n} min/ép", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} répertoriés", + "viewersDay": "${n} vus aujourd'hui", + "viewersWeek": "${n} vus cette semaine", + "viewersMonth": "${n} vus ce mois-ci", + "viewersYear": "${n} vus cette année", + "viewersAllTime": "${n} spectateurs", + "planning": "${n} prévoient de le regarder", + "favorited": "${n} favoris", + "dropRate": "${percent} l'ont abandonné", "comments": { - "one": "", - "other": "" + "one": "${n} commentaire", + "other": "${n} commentaires" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} votes", + "watching": "${n} le regardent", + "completed": "${n} l'ont terminé", + "onHold": "${n} en pause", + "dropped": "${n} ont abandonné" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Hiver", + "spring": "Printemps", + "summer": "Été", + "fall": "Automne", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "Court TV", + "movie": "Film", + "special": "Spécial", + "ova": "OVA", + "ona": "ONA", + "music": "Musique", + "other": "Autre" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Original", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Visual novel", + "game": "Jeu", + "webComic": "Webcomic", + "musicRelease": "Musique", + "otherMedia": "Autre" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Réalisateur", + "writer": "Scénariste", + "producer": "Producteur", + "creator": "Créateur", + "composer": "Compositeur" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Préquelle", + "sequel": "Suite", + "sideStory": "Histoire parallèle", + "spinOff": "Spin-off", + "alternativeVersion": "Version alternative", + "summary": "Résumé", + "parentStory": "Histoire principale", + "adaptation": "Adaptation", + "other": "Lié" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Diffusé le ${day} à ${time}", + "broadcastWithZone": "Diffusé le ${day} à ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Titre original", + "alsoKnownAs": "Également connu sous", + "studios": "Studios", + "country": "Pays", + "language": "Langue", + "released": "Sorti", + "physicalRelease": "En disque", + "ended": "Terminé", + "addedOn": "Ajouté le ${date}", + "yourRating": "Votre note", + "budget": "Budget", + "revenue": "Box-office", + "contentAdvisory": "Recommandation d'âge", + "tags": "Tags", + "revealSpoilerTags": "Afficher les tags spoiler", + "links": "Liens", + "watchOn": "Regarder sur", + "watchTrailer": "Regarder la bande-annonce", + "openOn": "Ouvrir sur ${site}", + "crew": "Équipe", + "ratings": "Notes", + "schedule": "Programme", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Recommandé par ${n} utilisateur", + "other": "Recommandé par ${n} utilisateurs" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Recommandé par ${who}", + "favoritedBy": "Ajouté aux favoris par ${who}", + "unairedEpisodes": "${n} pas encore diffusés", + "recommendedByPercent": "Recommandé par ${percent} des spectateurs", + "relatedTitles": "Titres liés", + "background": "Contexte" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} résultat", + "other": "${n} résultats" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Modifier la règle de synchronisation", "removeSyncRule": "Supprimer la règle de synchronisation", "removeSyncRuleConfirm": "Arrêter la synchronisation de « ${title} » ? Les épisodes téléchargés seront conservés.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Arrêter la synchronisation de « ${title} » ?", + "deleteSyncRuleDownloads": "Supprimer aussi les téléchargements associés", + "deleteSyncRuleDownloadsDescription": "Les téléchargements utilisés par une autre règle de synchronisation ou un autre profil seront conservés.", "syncRuleCreated": "Règle de synchronisation créée — ${count} épisodes non vus conservés", "syncRuleUpdated": "Règle de synchronisation mise à jour", "syncRuleRemoved": "Règle de synchronisation supprimée", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Règle de synchronisation et téléchargements associés supprimés", + "syncRuleCleanupBusy": "Les règles de synchronisation sont en cours de mise à jour. Réessayez dans un instant.", + "syncRuleCleanupUnavailable": "Les téléchargements associés n'ont pas pu être identifiés en toute sécurité. Reconnectez le serveur et réessayez, ou retirez la règle sans supprimer les téléchargements.", "syncedNewEpisodes": "${count} nouveaux épisodes synchronisés pour ${title}", "activeSyncRules": "Règles de synchronisation", "noSyncRules": "Aucune règle de synchronisation", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Activer Plezy sur ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Ajouter un serveur ${product}", "serverUrls": "URL du serveur", "serverUrlsHelper": "Plusieurs URL possibles, séparées par des virgules.", "findServer": "Rechercher un serveur", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Recherche de serveurs ${product} locaux...", + "localMediaBrowserServers": "Serveurs ${product} locaux", "username": "Nom d'utilisateur", "password": "Mot de passe", "signIn": "Se connecter", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Se connecter avec Plex", "pinExpired": "Le PIN a expiré avant la connexion. Veuillez réessayer.", "failedToRegisterAccount": "Échec de l'enregistrement du compte : ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Saisissez l'URL de votre serveur ${product}", "addConnectionTitle": "Ajouter une connexion", "addConnectionTitleScoped": "Ajouter à ${name}", "signInWithPlexCard": "Se connecter avec Plex", "signInWithPlexCardSubtitle": "Autorisez cet appareil. Les serveurs partagés sont ajoutés.", "signInWithPlexCardSubtitleScoped": "Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Se connecter à ${product}", + "connectToMediaBrowserCardSubtitle": "Saisissez l'URL de votre serveur, votre nom d'utilisateur et votre mot de passe.", + "connectToMediaBrowserCardSubtitleScoped": "Connectez-vous à votre serveur ${product}. Sera associé à ${name}.", "borrowFromAnotherProfile": "Emprunter à un autre profil", "borrowFromAnotherProfileSubtitle": "Réutiliser la connexion d'un autre profil. Les profils protégés par PIN exigent un PIN." } diff --git a/lib/i18n/hu.i18n.json b/lib/i18n/hu.i18n.json index 1fca0bf5..b985badb 100644 --- a/lib/i18n/hu.i18n.json +++ b/lib/i18n/hu.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Várakozás a hitelesítésre...\nJelentkezz be a böngésződben.", "useBrowser": "Böngésző használata", "or": "vagy", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Csatlakozás a(z) ${product} szolgáltatáshoz", "useQuickConnect": "Quick Connect használata", "quickConnectInstructions": "Nyisd meg a Quick Connect-et a Jellyfinben, és add meg ezt a kódot.", "quickConnectWaiting": "Várakozás a jóváhagyásra…", @@ -66,17 +66,17 @@ "exitFullscreen": "Kilépés a teljes képernyőből", "pressBackAgainToExit": "A kilépéshez nyomd meg újra a Vissza gombot", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Kritikusok", + "audience": "Közönség", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes kritikusok", + "rottenTomatoesAudience": "Rotten Tomatoes közönség" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Sötét", "oledTheme": "OLED", "libraryDensity": "Könyvtársűrűség", - "displayScale": "", + "displayScale": "Kijelző méretezése", "compact": "Kompakt", "comfortable": "Kényelmes", "tvCornerSpotlightBackdrop": "Sarokban megjelenő kiemelt háttérkép", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "Automatikus (ajánlott)", "bufferSizeWarning": "${heap} MB memória érhető el. A(z) ${size} MB méretű puffer befolyásolhatja a lejátszást.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Lejátszási puffer", + "playbackBufferAuto": "Automatikus (ajánlott)", + "playbackBufferLarge": "Nagy", + "playbackBufferExtraLarge": "Extra nagy", + "playbackBufferDescription": "Több puffert használ instabil kapcsolatok ellen. A pufferméret is korlátozza.", "defaultQualityTitle": "Alapértelmezett minőség", "musicQualityTitle": "Zene minősége", "subtitleStyling": "Feliratok stílusa", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Részletes naplózás engedélyezése a hibaelhárításhoz", "viewLogs": "Naplók megtekintése", "viewLogsDescription": "Alkalmazásnaplók megtekintése", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Képgyorsítótár törlése", + "clearImageCacheDescription": "Törli a gyorsítótárazott borítókat és miniatűröket. A képek lassabban tölthetők be, amíg újra le nem töltődnek.", + "clearImageCacheSuccess": "A képgyorsítótár sikeresen törölve", "resetSettings": "Beállítások visszaállítása", "resetSettingsDescription": "Az alapértelmezett beállítások visszaállítása. Ez a művelet nem vonható vissza.", "resetSettingsSuccess": "A beállítások sikeresen visszaállítva", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Fájlinformáció", - "overview": "", + "overview": "Áttekintés", "video": "Videó", "audio": "Hang", "subtitles": "Feliratok", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Beágyazott képek", + "dataStreams": "Adatfolyamok", + "lyrics": "Dalszövegek", "file": "Fájl", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Mellékletek", + "delivery": "Kézbesítés", + "versionCounter": "${index}. verzió a(z) ${count} közül", + "fileCounter": "${index}. fájl a(z) ${count} közül", + "noStreams": "A szerver nem jelentett adatfolyamot ehhez a fájlhoz.", + "copyPath": "Útvonal másolása", + "pathCopied": "Fájlútvonal kimásolva", "codec": "Kodek", - "codecTag": "", + "codecTag": "Kodekcímke", "resolution": "Felbontás", - "codedResolution": "", + "codedResolution": "Kódolt felbontás", "bitrate": "Bitráta", "frameRate": "Képkockasebesség", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Forgatás", + "comment": "Megjegyzés", + "audioDescription": "Hangleírás", + "headerCompression": "Fejléc-tömörítés", + "sidecarFile": "Kísérő fájl", + "transportTimestamp": "Szállítási időbélyeg", + "displayOffset": "Megjelenítési eltolás", + "previewFailureCode": "Előnézeti hibakód", + "previewRetries": "Előnézeti újrapróbálkozások", "aspectRatio": "Méretarány", - "pixelAspectRatio": "", + "pixelAspectRatio": "Pixel képarány", "profile": "Profil", - "level": "", + "level": "Szint", "bitDepth": "Bitmélység", - "pixelFormat": "", + "pixelFormat": "Pixelformátum", "colorSpace": "Színtér", "colorRange": "Színtartomány", "colorPrimaries": "Elsődleges színek", - "colorTransfer": "", + "colorTransfer": "Színátvitel", "chromaSubsampling": "Krominancia-alulmintavételezés", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Kroma elhelyezkedés", + "scanType": "Pásztázási típus", + "interlaced": "Váltott soros", + "anamorphic": "Anamorf", + "referenceFrames": "Referencia képkockák", + "dynamicRange": "Dinamikatartomány", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision szint", + "dolbyVisionVersion": "Dolby Vision verzió", + "dolbyVisionLayers": "Dolby Vision rétegek", + "baseLayerCompatibility": "Alapréteg-kompatibilitás", + "avcBitstream": "AVC bitfolyam", + "nalLengthSize": "NAL hosszméret", + "scalingMatrix": "Egyéni méretezési mátrix", + "streamIdentifier": "Adatfolyam-azonosító", + "streamIndex": "Adatfolyam-index", + "streamId": "Adatfolyam azonosítója", + "language": "Nyelv", + "languageCode": "Nyelvkód", + "streamTitle": "Sáv címe", "channels": "Csatornák", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Mintavételi frekvencia", + "spatialAudio": "Térbeli hang", + "textBased": "Szövegalapú", + "subtitleFormat": "Kísérő formátum", + "provider": "Szolgáltató", + "matchScore": "Egyezési pontszám", + "externalDelivery": "Külön is kiszolgálható", + "sidecarPath": "Kísérő fájl útvonala", + "sourceStream": "Másolva innen", + "temporary": "Ideiglenes", + "timeBase": "Időalap", "overallBitrate": "Összesített bitráta", "path": "Elérési út", - "fileName": "", + "fileName": "Fájlnév", "size": "Méret", - "totalSize": "", + "totalSize": "Teljes méret", "container": "Konténer", "duration": "Időtartam", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Előnézeti miniatűrök", + "previewIndex": "Előnézeti index", + "packetLength": "Csomaghossz", + "filePresent": "Fájl jelen van", + "fileReadable": "A szerver számára olvasható", + "streamPath": "Adatfolyam útvonala", "optimizedForStreaming": "Adatfolyam-továbbításra optimalizálva", "has64bitOffsets": "64 bites eltolások", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokoll", + "mediaType": "Médiatípus", + "sourceKind": "Forrás típusa", + "optimizedVersion": "Optimalizált verzió", + "optimizationTarget": "Optimalizálási cél", + "deletedAt": "Törölve", + "remoteSource": "Távoli forrás", + "infiniteStream": "Végtelen adatfolyam", + "directPlay": "Közvetlen lejátszás", + "directStream": "Közvetlen adatfolyam", + "transcoding": "Átkódolás", + "etag": "ETag", + "versionId": "Verzióazonosító", + "fileId": "Fájlazonosító", + "defaultAudioTrack": "Alapértelmezett hangsáv", + "defaultSubtitleTrack": "Alapértelmezett feliratsáv", + "subtitlesOff": "Ki", + "flagDefault": "Alapértelmezett", + "flagForced": "Kényszerített", + "flagSelected": "Kiválasztva", + "flagExternal": "Külső", + "flagHearingImpaired": "Nagyothallóknak", + "flagDub": "Szinkron", + "flagOriginal": "Eredeti" }, "mediaMenu": { "markAsWatched": "Megjelölés megtekintettként", @@ -524,35 +524,35 @@ "shufflePlay": "Véletlenszerű lejátszás", "shuffleNotAvailableOffline": "A véletlenszerű lejátszás nem érhető el offline", "fileInfo": "Fájlinformáció", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Epizód törlése a szerverről", + "deleteSeasonFromServer": "Évad törlése a szerverről", + "deleteShowFromServer": "Sorozat törlése a szerverről", + "deleteMovieFromServer": "Film törlése a szerverről", + "deleteEpisodeTitle": "Töröljük ezt az epizódot?", + "deleteSeasonTitle": "Töröljük ezt az évadot?", + "deleteShowTitle": "Töröljük ezt a sorozatot?", + "deleteMovieTitle": "Töröljük ezt a filmet?", + "deleteEpisodeConfirm": "Epizód törlése", + "deleteSeasonConfirm": "Évad törlése", + "deleteShowConfirm": "Sorozat törlése", + "deleteMovieConfirm": "Film törlése", + "deleteAnyway": "Törlés mindenképp", + "confirmDeleteTarget": "Véglegesen töröljük a(z) ${title} elemet a szerverről?", "deleteMultipleWarning": "Ez magában foglalja az összes epizódot és azok fájljait.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Ez törli az összes (${n}) epizódot benne és a hozzá tartozó fájlt.", + "other": "Ez törli az összes (${n}) epizódot benne és a fájljaikat." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Ez az elem ${n} fájlban van tárolva, amely törlésre kerül.", + "other": "Ez az elem ${n} fájlban van tárolva, és mindegyik törlésre kerül." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "További ${n} epizód is ugyanabban a fájlban van, és szintén törlésre kerül:", + "other": "További ${n} epizód is ugyanabban a fájlban van, és szintén törlésre kerül:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "A Plezy nem tudta ellenőrizni, mely fájlokat távolítja el ez, ezért a fent nevezett elemnél többet is törölhet. Szakítsa meg és próbálja újra, vagy töröljön mindenképp.", + "deleteScopeUnverifiedNoFileInfo": "A szerver nem szolgáltatott fájladatokat ehhez az elemhez, ezért a Plezy nem tudja ellenőrizni, mely fájlokat távolít el. A fent nevezett elemnél többet is törölhet.", "mediaDeletedSuccessfully": "Médiaelem sikeresen törölve", "mediaFailedToDelete": "Nem sikerült a médiaelem törlése", "rate": "Értékelés", @@ -628,9 +628,9 @@ "playNext": "Következő lejátszása", "playButton": "Lejátszás", "pauseButton": "Szünet", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Szüneteltetve", + "playbackResumed": "Lejátszás", + "loadingVideo": "Videó betöltése", "showPlaybackControls": "Lejátszásvezérlők megjelenítése", "hidePlaybackControls": "Lejátszásvezérlők elrejtése", "seekBackwardButton": "Tekerés hátra ${seconds} másodperccel", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Eltávolítva a folytatásból", "errorLoading": "Hiba: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Néhány médiaszervert nem sikerült keresni. Az elérhető találatok megjelenítése.", "streamInterrupted": "Az adatfolyam megszakadt. Az újrapróbálkozáshoz indítsd el a lejátszást, vagy tekerj másik pozícióra.", "liveStreamInterrupted": "Az élő adás megszakadt. Nyomd meg a lejátszást az újrapróbálkozáshoz.", "fileInfoNotAvailable": "A fájlinformáció nem érhető el", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Váltás kompatibilis lejátszóra...", "serverLimitTitle": "A lejátszás nem sikerült", "serverLimitBody": "Szerverhiba (HTTP 500). A munkamenetet valószínűleg egy sávszélességi vagy átkódolási korlát utasította el. Kérd meg a tulajdonost a korlát módosítására.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "A fájl nem érhető el", + "mediaUnreadableBody": "A szerver megtalálta ezt az elemet, de nem tudta beolvasni a fájlját (HTTP 404). A fájl valószínűleg áthelyezésre vagy törlésre került, vagy a tárhelye offline. Kérje meg a szerver tulajdonosát, hogy ellenőrizze a fájlt, és vizsgálja újra a könyvtárat.", "logsUploaded": "Naplók feltöltve", "logsUploadFailed": "Nem sikerült a naplók feltöltése", "logId": "Naplóazonosító" @@ -861,8 +861,8 @@ "sessionExpiredOne": "A(z) ${name} munkamenete lejárt", "sessionExpiredMany": "${count} szerver munkamenete lejárt", "signInAgain": "Bejelentkezés újra", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "A(z) ${product} kapcsolat szerkesztése", + "editMediaBrowserIntro": "Adjon hozzá vagy távolítson el URL-eket a(z) ${serverName} esetén. A Plezy a legkisebb késleltetésű, elérhető URL-t fogja használni." }, "discover": { "title": "Felfedezés", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Keresés sikertelen: ${error}", - "searchUnavailable": "", + "searchUnavailable": "A keresés egyetlen médiaszervert sem tudott elérni.", "connectionTimeout": "Hálózati időtúllépés a következő betöltésekor: ${context}", "connectionFailed": "Nem sikerült csatlakozni a médiaszerverhez", "unableToLoad": "Nem sikerült betölteni a következőt: ${context}. Próbáld újra.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Naplók feltöltése" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "A Plezy nem tudott elindulni", + "failedBody": "Valami hiba történt az indítás során. Az alábbi részletek mutatják, mi hibázott.", + "failedBodyRepairable": "A Plezy mentett beállításfájlja sérült, és újra kell építeni, mielőtt a Plezy elindulhatna. Az újrapróbálkozás nem segít – válassza a Tárhely javítása lehetőséget.", + "phaseLabel": "Lépés", + "showDetails": "Részletek megjelenítése", + "hideDetails": "Részletek elrejtése", + "copyDetails": "Részletek másolása", + "detailsCopied": "A részletek a vágólapra kerültek", + "uploadDetails": "Részletek feltöltése", + "repairStorage": "Tárhely javítása", + "repairTitle": "Javítsuk a tárolt adatokat?", + "repairBodyCommon": "A Plezy beállításfájlja sérült, és nem olvasható. A javítás minden beállítást visszaállít az alapértelmezettre.", + "repairBodyOneCredential": "Egy mentett bejelentkezés sérült, és nem olvasható. A javítás csak azt távolítja el; a többi beállítása érintetlen marad.", + "repairBodySignInsKept": "A szervereinek és profiljainak bejelentkezve kell maradniuk.", + "repairBodySignInsLost": "A mentett bejelentkezéseket védő kulcs nem nyerhető vissza ebből a fájlból, ezért minden szerverre és profilba újra be kell jelentkeznie. A médiaszerveren semmi nem érintett.", + "repairBodySessionsUncertain": "A nyomkövetők (MAL, AniList, Simkl, Trakt) és a Seerr külön vannak tárolva, és megmaradhatnak vagy nem. A Plezy pontosan megmondja, mit őrzött meg.", + "repairConfirm": "Javítás", + "repairSucceeded": "A tárhely javítva", + "repairNeedsRestart": "A tárhely javítva – újraindítás szükséges", + "restartRequiredBody": "Az adatait kijavítottuk, de a Plezy-nek frissen kell elindulnia, mielőtt használhatná. Zárja be a Plezy-t, és nyissa meg újra.", + "quitPlezy": "Kilépés a Plezy-ből", + "repairFailed": "A javítás nem sikerült", + "repairKeptSignIns": "A szerverei és profiljai továbbra is be vannak jelentkezve.", + "repairLostSignIns": "A mentett bejelentkezéseket védő kulcs nem volt visszanyerhető. Minden szerverre és profilba újra be kell jelentkeznie.", + "repairLostSessions": "Legalább egy nyomkövető- vagy Seerr-kapcsolat elveszett, és újra kell csatlakoztatni.", + "backupTitle": "A sérült fájlról másolat készült", + "backupWarning": "Bejelentkezési adatait tartalmazza. Ne töltse fel és ne ossza meg.", + "deleteBackup": "Másolat törlése", + "backupDeleted": "A másolat törölve.", + "previousFailureTitle": "A Plezy legutóbb nem tudott elindulni" }, "licenses": { "relatedPackages": "Kapcsolódó csomagok", @@ -1107,134 +1107,134 @@ "searchPrompt": "Filmek és sorozatok keresése a következőn: ${source}.", "searchFailed": "A keresés nem sikerült. Ellenőrizd a kapcsolatot és próbáld újra.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} népszerű", + "rankAiring": "#${n} adásban", + "rankRated": "#${n} értékelt", + "rankFavorited": "#${n} kedvenc", + "rankTrending": "#${n} felkapott", + "rankSeasonal": "#${n} a(z) ${season} évadban", + "watchingNow": "${n} nézi", + "available": "Elérhető", + "partiallyAvailable": "Részben elérhető", + "availableIn4k": "4K elérhető", + "requested": "Kérve", + "pendingApproval": "Jóváhagyásra vár", + "processing": "Feldolgozás alatt", + "declined": "Elutasítva", + "requestFailed": "A kérés nem sikerült", + "requested4k": "4K kérve", + "seasonsAvailable": "${available}/${total} évad", + "nextEpisodeIn": "${episode}. ep. ${duration} múlva", + "nextAiringIn": "Következő ${duration} múlva", + "episodesShort": "${n} ep.", + "minutesPerEpisode": "${n} perc/ep.", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} listázva", + "viewersDay": "${n} nézte ma", + "viewersWeek": "${n} nézte ezen a héten", + "viewersMonth": "${n} nézte ebben a hónapban", + "viewersYear": "${n} nézte ebben az évben", + "viewersAllTime": "${n} néző", + "planning": "${n} tervezi megnézni", + "favorited": "${n} kedvenc", + "dropRate": "${percent} felhagyott vele", "comments": { - "one": "", - "other": "" + "one": "${n} hozzászólás", + "other": "${n} hozzászólás" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} szavazat", + "watching": "${n} nézi", + "completed": "${n} befejezte", + "onHold": "${n} szünetelteti", + "dropped": "${n} felhagyott vele" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Tél", + "spring": "Tavasz", + "summer": "Nyár", + "fall": "Ősz", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV rövid", + "movie": "Film", + "special": "Különkiadás", + "ova": "OVA", + "ona": "ONA", + "music": "Zene", + "other": "Egyéb" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Eredeti", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Regény", + "visualNovel": "Visual novel", + "game": "Játék", + "webComic": "Webképregény", + "musicRelease": "Zene", + "otherMedia": "Egyéb" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Rendező", + "writer": "Író", + "producer": "Producer", + "creator": "Alkotó", + "composer": "Zeneszerző" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Előzmény", + "sequel": "Folytatás", + "sideStory": "Melléktörténet", + "spinOff": "Spin-off", + "alternativeVersion": "Alternatív verzió", + "summary": "Összefoglaló", + "parentStory": "Fő történet", + "adaptation": "Adaptáció", + "other": "Kapcsolódó" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Adásban: ${day}, ${time} órakor", + "broadcastWithZone": "Adásban: ${day}, ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Eredeti cím", + "alsoKnownAs": "Más néven", + "studios": "Stúdiók", + "country": "Ország", + "language": "Nyelv", + "released": "Megjelent", + "physicalRelease": "Lemezes", + "ended": "Befejeződött", + "addedOn": "Hozzáadva: ${date}", + "yourRating": "Az Ön értékelése", + "budget": "Költségvetés", + "revenue": "Bevétel", + "contentAdvisory": "Korhatár", + "tags": "Címkék", + "revealSpoilerTags": "Spoiler címkék megjelenítése", + "links": "Hivatkozások", + "watchOn": "Megnézhető itt", + "watchTrailer": "Előzetes megtekintése", + "openOn": "Megnyitás itt: ${site}", + "crew": "Stáb", + "ratings": "Értékelések", + "schedule": "Műsorrend", "recommendedByUsers": { - "one": "", - "other": "" + "one": "${n} felhasználó ajánlja", + "other": "${n} felhasználó ajánlja" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Ajánlotta: ${who}", + "favoritedBy": "Kedvencek közt: ${who}", + "unairedEpisodes": "${n} még nem került adásba", + "recommendedByPercent": "A nézők ${percent}-a ajánlja", + "relatedTitles": "Kapcsolódó címek", + "background": "Háttér" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} találat", + "other": "${n} találat" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Szinkronizálási szabály szerkesztése", "removeSyncRule": "Szinkronizálási szabály eltávolítása", "removeSyncRuleConfirm": "Leállítod a(z) \"${title}\" szinkronizálását? A letöltött epizódok megmaradnak.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Leállítjuk a(z) \"${title}\" szinkronizálását?", + "deleteSyncRuleDownloads": "A kapcsolódó letöltések törlése is", + "deleteSyncRuleDownloadsDescription": "A másik szinkronszabály vagy profil által használt letöltések megmaradnak.", "syncRuleCreated": "Szinkronizálási szabály létrehozva — ${count} nem látott epizód megtartása", "syncRuleUpdated": "Szinkronizálási szabály frissítve", "syncRuleRemoved": "Szinkronizálási szabály eltávolítva", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "A szinkronszabály és a kapcsolódó letöltések eltávolítva", + "syncRuleCleanupBusy": "A szinkronszabályok éppen frissülnek. Próbálja újra egy pillanat múlva.", + "syncRuleCleanupUnavailable": "A kapcsolódó letöltések nem azonosíthatók biztonságosan. Csatlakoztassa újra a szervert, és próbálja újra, vagy távolítsa el a szabályt a letöltések törlése nélkül.", "syncedNewEpisodes": "${count} új epizód szinkronizálva a következőhöz: ${title}", "activeSyncRules": "Szinkronizálási szabályok", "noSyncRules": "Nincsenek szinkronizálási szabályok", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Plezy aktiválása a következőn: ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product} szerver hozzáadása", "serverUrls": "Szerver URL-címei", "serverUrlsHelper": "Több URL is megadható, vesszővel elválasztva.", "findServer": "Szerver keresése", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Helyi ${product} szerverek keresése...", + "localMediaBrowserServers": "Helyi ${product} szerverek", "username": "Felhasználónév", "password": "Jelszó", "signIn": "Bejelentkezés", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Bejelentkezés Plexszel", "pinExpired": "A PIN-kód a bejelentkezés előtt lejárt. Próbáld újra.", "failedToRegisterAccount": "Nem sikerült a fiók regisztrálása: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Adja meg a(z) ${product} szerver URL-jét", "addConnectionTitle": "Kapcsolat hozzáadása", "addConnectionTitleScoped": "Hozzáadás a következőhöz: ${name}", "signInWithPlexCard": "Bejelentkezés Plexszel", "signInWithPlexCardSubtitle": "Eszköz engedélyezése. A megosztott szerverek hozzáadásra kerülnek.", "signInWithPlexCardSubtitleScoped": "Plex-fiók engedélyezése. A Plex Home-felhasználókból profilok lesznek.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Csatlakozás a(z) ${product} szolgáltatáshoz", + "connectToMediaBrowserCardSubtitle": "Adja meg a szerver URL-jét, felhasználónevét és jelszavát.", + "connectToMediaBrowserCardSubtitleScoped": "Jelentkezzen be a(z) ${product} szerverére. A(z) ${name} szolgáltatáshoz kötődik.", "borrowFromAnotherProfile": "Kapcsolat használata másik profilból", "borrowFromAnotherProfileSubtitle": "Egy másik profil kapcsolatának használata. A PIN-kóddal védett profilokhoz PIN-kód szükséges." } diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 9d62b3b3..b7f60d26 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "In attesa di autenticazione...\nAccedi dal browser.", "useBrowser": "Usa il browser", "or": "o", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Connettiti a ${product}", "useQuickConnect": "Usa Quick Connect", "quickConnectInstructions": "Apri Quick Connect in Jellyfin e inserisci questo codice.", "quickConnectWaiting": "In attesa di approvazione…", @@ -66,17 +66,17 @@ "exitFullscreen": "Esci dalla modalità a schermo intero", "pressBackAgainToExit": "Premi di nuovo Indietro per uscire", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Critici", + "audience": "Pubblico", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Critici di Rotten Tomatoes", + "rottenTomatoesAudience": "Pubblico di Rotten Tomatoes" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Scuro", "oledTheme": "OLED", "libraryDensity": "Densità della libreria", - "displayScale": "", + "displayScale": "Scala di visualizzazione", "compact": "Compatta", "comfortable": "Comoda", "tvCornerSpotlightBackdrop": "Sfondo in evidenza nell'angolo", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "Automatica (consigliata)", "bufferSizeWarning": "${heap}MB di memoria disponibile. Un buffer di ${size}MB può influire sulla riproduzione.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Buffer di riproduzione", + "playbackBufferAuto": "Auto (consigliato)", + "playbackBufferLarge": "Grande", + "playbackBufferExtraLarge": "Extra grande", + "playbackBufferDescription": "Bufferizza di più contro connessioni instabili. Limitato anche dalla dimensione del buffer.", "defaultQualityTitle": "Qualità predefinita", "musicQualityTitle": "Qualità musicale", "subtitleStyling": "Stile sottotitoli", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Abilita una registrazione dettagliata per la risoluzione dei problemi", "viewLogs": "Visualizza i log", "viewLogsDescription": "Visualizza i log dell'applicazione", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Svuota cache immagini", + "clearImageCacheDescription": "Svuota le immagini e le miniature memorizzate nella cache. Le immagini potrebbero caricarsi più lentamente finché non vengono scaricate di nuovo.", + "clearImageCacheSuccess": "Cache immagini svuotata correttamente", "resetSettings": "Ripristina impostazioni", "resetSettingsDescription": "Ripristina le impostazioni predefinite. Questa operazione non può essere annullata.", "resetSettingsSuccess": "Impostazioni ripristinate correttamente", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Info sul file", - "overview": "", + "overview": "Panoramica", "video": "Video", "audio": "Audio", "subtitles": "Sottotitoli", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Immagini incorporate", + "dataStreams": "Flussi di dati", + "lyrics": "Testi", "file": "File", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Allegati", + "delivery": "Distribuzione", + "versionCounter": "Versione ${index} di ${count}", + "fileCounter": "File ${index} di ${count}", + "noStreams": "Il server non ha segnalato flussi per questo file.", + "copyPath": "Copia percorso", + "pathCopied": "Percorso del file copiato", "codec": "Codec", - "codecTag": "", + "codecTag": "Tag codec", "resolution": "Risoluzione", - "codedResolution": "", + "codedResolution": "Risoluzione codificata", "bitrate": "Bitrate", "frameRate": "Frequenza fotogrammi", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotazione", + "comment": "Commento", + "audioDescription": "Descrizione audio", + "headerCompression": "Compressione header", + "sidecarFile": "File sidecar", + "transportTimestamp": "Timestamp di trasporto", + "displayOffset": "Offset di visualizzazione", + "previewFailureCode": "Codice errore anteprima", + "previewRetries": "Riprova anteprima", "aspectRatio": "Proporzioni", - "pixelAspectRatio": "", + "pixelAspectRatio": "Aspect ratio pixel", "profile": "Profilo", - "level": "", + "level": "Livello", "bitDepth": "Profondità in bit", - "pixelFormat": "", + "pixelFormat": "Formato pixel", "colorSpace": "Spazio colore", "colorRange": "Gamma colori", "colorPrimaries": "Colori primari", - "colorTransfer": "", + "colorTransfer": "Trasferimento colore", "chromaSubsampling": "Sottocampionamento cromatico", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Posizione crominanza", + "scanType": "Tipo di scansione", + "interlaced": "Interlacciato", + "anamorphic": "Anamorfico", + "referenceFrames": "Frame di riferimento", + "dynamicRange": "Dynamic Range", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision Level", + "dolbyVisionVersion": "Dolby Vision Version", + "dolbyVisionLayers": "Dolby Vision Layers", + "baseLayerCompatibility": "Compatibilità layer di base", + "avcBitstream": "Bitstream AVC", + "nalLengthSize": "Dimensione lunghezza NAL", + "scalingMatrix": "Matrice di scaling personalizzata", + "streamIdentifier": "Identificatore flusso", + "streamIndex": "Indice flusso", + "streamId": "ID flusso", + "language": "Lingua", + "languageCode": "Codice lingua", + "streamTitle": "Titolo traccia", "channels": "Canali", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Frequenza di campionamento", + "spatialAudio": "Audio spaziale", + "textBased": "Testuale", + "subtitleFormat": "Formato sidecar", + "provider": "Provider", + "matchScore": "Punteggio corrispondenza", + "externalDelivery": "Può essere servito separatamente", + "sidecarPath": "Percorso sidecar", + "sourceStream": "Copiato da", + "temporary": "Temporaneo", + "timeBase": "Base temporale", "overallBitrate": "Bitrate complessivo", "path": "Percorso", - "fileName": "", + "fileName": "Nome file", "size": "Dimensione", - "totalSize": "", + "totalSize": "Dimensione totale", "container": "Contenitore", "duration": "Durata", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Miniature anteprima", + "previewIndex": "Indice anteprima", + "packetLength": "Lunghezza pacchetto", + "filePresent": "File presente", + "fileReadable": "Leggibile dal server", + "streamPath": "Percorso flusso", "optimizedForStreaming": "Ottimizzato per lo streaming", "has64bitOffsets": "Offset a 64 bit", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protocollo", + "mediaType": "Tipo di supporto", + "sourceKind": "Tipo di origine", + "optimizedVersion": "Versione ottimizzata", + "optimizationTarget": "Obiettivo ottimizzazione", + "deletedAt": "Eliminato", + "remoteSource": "Origine remota", + "infiniteStream": "Flusso infinito", + "directPlay": "Riproduzione diretta", + "directStream": "Streaming diretto", + "transcoding": "Transcodifica", + "etag": "ETag", + "versionId": "ID versione", + "fileId": "ID file", + "defaultAudioTrack": "Traccia audio predefinita", + "defaultSubtitleTrack": "Traccia sottotitoli predefinita", + "subtitlesOff": "Disattivati", + "flagDefault": "Predefinito", + "flagForced": "Forzato", + "flagSelected": "Selezionato", + "flagExternal": "Esterno", + "flagHearingImpaired": "Non udenti", + "flagDub": "Doppiato", + "flagOriginal": "Originale" }, "mediaMenu": { "markAsWatched": "Segna come visto", @@ -524,35 +524,35 @@ "shufflePlay": "Riproduzione casuale", "shuffleNotAvailableOffline": "Riproduzione casuale non disponibile offline", "fileInfo": "Info sul file", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Elimina episodio dal server", + "deleteSeasonFromServer": "Elimina stagione dal server", + "deleteShowFromServer": "Elimina serie dal server", + "deleteMovieFromServer": "Elimina film dal server", + "deleteEpisodeTitle": "Eliminare questo episodio?", + "deleteSeasonTitle": "Eliminare questa stagione?", + "deleteShowTitle": "Eliminare questa serie?", + "deleteMovieTitle": "Eliminare questo film?", + "deleteEpisodeConfirm": "Elimina episodio", + "deleteSeasonConfirm": "Elimina stagione", + "deleteShowConfirm": "Elimina serie", + "deleteMovieConfirm": "Elimina film", + "deleteAnyway": "Elimina comunque", + "confirmDeleteTarget": "Eliminare definitivamente ${title} dal tuo server?", "deleteMultipleWarning": "Sono inclusi tutti gli episodi e i relativi file.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Questo elimina tutti i ${n} episodio in essa contenuto e il relativo file.", + "other": "Questo elimina tutti i ${n} episodi in essa contenuti e i relativi file." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Questo elemento è archiviato in ${n} file, che verrà eliminato.", + "other": "Questo elemento è archiviato in ${n} file, e tutti verranno eliminati." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} altro episodio è archiviato nello stesso file e verrà eliminato anche lui:", + "other": "${n} altri episodi sono archiviati nello stesso file e verranno eliminati anche loro:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy non ha potuto verificare quali file rimuoverà, quindi potrebbe eliminare più di quanto indicato sopra. Annulla e riprova, oppure elimina comunque.", + "deleteScopeUnverifiedNoFileInfo": "Il tuo server non ha fornito i dettagli del file per questo elemento, quindi Plezy non può verificare quali file rimuoverà. Potrebbe eliminare più di quanto indicato sopra.", "mediaDeletedSuccessfully": "Elemento multimediale eliminato correttamente", "mediaFailedToDelete": "Impossibile eliminare l'elemento multimediale", "rate": "Valuta", @@ -628,9 +628,9 @@ "playNext": "Riproduci il successivo", "playButton": "Riproduci", "pauseButton": "Pausa", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "In pausa", + "playbackResumed": "Riproduzione", + "loadingVideo": "Caricamento video", "showPlaybackControls": "Mostra i controlli di riproduzione", "hidePlaybackControls": "Nascondi i controlli di riproduzione", "seekBackwardButton": "Riavvolgi di ${seconds} secondi", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Rimosso da Continua a guardare", "errorLoading": "Errore: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Non è stato possibile cercare in alcuni server multimediali. Vengono mostrati i risultati disponibili.", "streamInterrupted": "La riproduzione si è interrotta. Premi Riproduci o vai a un altro punto per riprovare.", "liveStreamInterrupted": "La diretta si è interrotta. Premi Riproduci per riprovare.", "fileInfoNotAvailable": "Informazioni sul file non disponibili", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Passaggio al lettore compatibile...", "serverLimitTitle": "Riproduzione non riuscita", "serverLimitBody": "Errore del server (HTTP 500). È probabile che un limite di banda o transcodifica abbia impedito questa sessione. Chiedi al proprietario di modificare il limite.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "File non disponibile", + "mediaUnreadableBody": "Il server ha trovato questo elemento ma non ha potuto leggere il suo file (HTTP 404). Il file è stato probabilmente spostato o eliminato, oppure il suo storage è offline. Chiedi al proprietario del server di controllare il file e di riscansionare la libreria.", "logsUploaded": "Log caricati", "logsUploadFailed": "Impossibile caricare i log", "logId": "ID log" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Sessione scaduta per ${name}", "sessionExpiredMany": "Sessione scaduta per ${count} server", "signInAgain": "Accedi di nuovo", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Modifica connessione ${product}", + "editMediaBrowserIntro": "Aggiungi o rimuovi gli URL per ${serverName}. Plezy userà l'URL raggiungibile con la latenza più bassa." }, "discover": { "title": "Esplora", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Ricerca non riuscita: ${error}", - "searchUnavailable": "", + "searchUnavailable": "La ricerca non ha potuto raggiungere alcun server multimediale.", "connectionTimeout": "Tempo scaduto per la connessione durante il caricamento di ${context}", "connectionFailed": "Impossibile connettersi al server multimediale", "unableToLoad": "Impossibile caricare ${context}. Riprova.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Carica log" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy non ha potuto avviarsi", + "failedBody": "Si è verificato un errore durante l'avvio. I dettagli seguenti indicano cosa non ha funzionato.", + "failedBodyRepairable": "Il file delle impostazioni salvate di Plezy è danneggiato e deve essere ricostruito prima che Plezy possa avviarsi. Riprovare non servirà: scegli Ripara storage.", + "phaseLabel": "Passaggio", + "showDetails": "Mostra dettagli", + "hideDetails": "Nascondi dettagli", + "copyDetails": "Copia dettagli", + "detailsCopied": "Dettagli copiati negli appunti", + "uploadDetails": "Carica dettagli", + "repairStorage": "Ripara storage", + "repairTitle": "Riparare i dati archiviati?", + "repairBodyCommon": "Il file delle impostazioni di Plezy è danneggiato e non può essere letto. La riparazione ripristina ogni impostazione al suo valore predefinito.", + "repairBodyOneCredential": "Un accesso salvato è danneggiato e non può essere letto. La riparazione rimuove solo quello; le altre impostazioni restano intatte.", + "repairBodySignInsKept": "I tuoi server e profili dovrebbero rimanere con accesso effettuato.", + "repairBodySignInsLost": "La chiave che protegge i tuoi accessi salvati non può essere recuperata da questo file, quindi dovrai effettuare di nuovo l'accesso a ogni server e profilo. Nulla sul tuo server multimediale è interessato.", + "repairBodySessionsUncertain": "I tracker (MAL, AniList, Simkl, Trakt) e Seerr sono archiviati separatamente e potrebbero sopravvivere o meno. Plezy ti dirà esattamente cosa ha conservato.", + "repairConfirm": "Ripara", + "repairSucceeded": "Storage riparato", + "repairNeedsRestart": "Storage riparato — riavvio richiesto", + "restartRequiredBody": "I tuoi dati sono stati riparati, ma Plezy deve ripartire da zero prima di poterli usare. Chiudi Plezy e riaprilo.", + "quitPlezy": "Esci da Plezy", + "repairFailed": "Riparazione non riuscita", + "repairKeptSignIns": "I tuoi server e profili hanno ancora l'accesso effettuato.", + "repairLostSignIns": "La chiave che protegge i tuoi accessi salvati non ha potuto essere recuperata. Dovrai effettuare di nuovo l'accesso a ogni server e profilo.", + "repairLostSessions": "Almeno una connessione a un tracker o a Seerr è andata persa e deve essere riconnessa.", + "backupTitle": "È stata conservata una copia del file danneggiato", + "backupWarning": "Contiene le tue credenziali di accesso. Non caricarla né condividerla.", + "deleteBackup": "Elimina copia", + "backupDeleted": "Copia eliminata.", + "previousFailureTitle": "Plezy non è riuscito ad avviarsi l'ultima volta" }, "licenses": { "relatedPackages": "Pacchetti correlati", @@ -1060,7 +1060,7 @@ "navigation": { "libraries": "Librerie", "downloads": "Download", - "liveTv": "TV in diretta", + "liveTv": "Diretta", "explore": "Esplora" }, "explore": { @@ -1107,134 +1107,134 @@ "searchPrompt": "Cerca film e serie TV su ${source}.", "searchFailed": "Ricerca fallita. Controlla la connessione e riprova.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} popolari", + "rankAiring": "#${n} in onda", + "rankRated": "#${n} valutati", + "rankFavorited": "#${n} preferiti", + "rankTrending": "#${n} di tendenza", + "rankSeasonal": "#${n} in ${season}", + "watchingNow": "${n} in visione", + "available": "Disponibile", + "partiallyAvailable": "Parzialmente disponibile", + "availableIn4k": "Disponibile in 4K", + "requested": "Richiesto", + "pendingApproval": "In attesa di approvazione", + "processing": "In elaborazione", + "declined": "Rifiutato", + "requestFailed": "Richiesta non riuscita", + "requested4k": "Richiesto in 4K", + "seasonsAvailable": "${available}/${total} stagioni", + "nextEpisodeIn": "Ep ${episode} tra ${duration}", + "nextAiringIn": "Prossimo tra ${duration}", + "episodesShort": "${n} ep", + "minutesPerEpisode": "${n} min/ep", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} in elenco", + "viewersDay": "${n} guardati oggi", + "viewersWeek": "${n} guardati questa settimana", + "viewersMonth": "${n} guardati questo mese", + "viewersYear": "${n} guardati quest'anno", + "viewersAllTime": "${n} spettatori", + "planning": "${n} hanno in programma di guardarlo", + "favorited": "${n} preferiti", + "dropRate": "${percent} lo ha abbandonato", "comments": { - "one": "", - "other": "" + "one": "${n} commento", + "other": "${n} commenti" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} voti", + "watching": "${n} lo stanno guardando", + "completed": "${n} completati", + "onHold": "${n} in pausa", + "dropped": "${n} abbandonati" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Inverno", + "spring": "Primavera", + "summer": "Estate", + "fall": "Autunno", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV Short", + "movie": "Film", + "special": "Speciale", + "ova": "OVA", + "ona": "ONA", + "music": "Musica", + "other": "Altro" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Originale", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Romanzo", + "visualNovel": "Visual novel", + "game": "Videogioco", + "webComic": "Web comic", + "musicRelease": "Musica", + "otherMedia": "Altro" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Regista", + "writer": "Sceneggiatore", + "producer": "Produttore", + "creator": "Creatore", + "composer": "Compositore" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Sequel", + "sideStory": "Storia secondaria", + "spinOff": "Spin-off", + "alternativeVersion": "Versione alternativa", + "summary": "Riepilogo", + "parentStory": "Storia originale", + "adaptation": "Adattamento", + "other": "Correlati" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Va in onda ${day} alle ${time}", + "broadcastWithZone": "Va in onda ${day} alle ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Titolo originale", + "alsoKnownAs": "Conosciuto anche come", + "studios": "Studi", + "country": "Paese", + "language": "Lingua", + "released": "Uscito", + "physicalRelease": "Su disco", + "ended": "Concluso", + "addedOn": "Aggiunto ${date}", + "yourRating": "La tua valutazione", + "budget": "Budget", + "revenue": "Incassi", + "contentAdvisory": "Guida all'età", + "tags": "Tag", + "revealSpoilerTags": "Mostra tag spoiler", + "links": "Link", + "watchOn": "Guarda su", + "watchTrailer": "Guarda trailer", + "openOn": "Apri su ${site}", + "crew": "Cast tecnico", + "ratings": "Valutazioni", + "schedule": "Programmazione", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Consigliato da ${n} utente", + "other": "Consigliato da ${n} utenti" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Consigliato da ${who}", + "favoritedBy": "Preferito da ${who}", + "unairedEpisodes": "${n} non ancora in onda", + "recommendedByPercent": "Consigliato dal ${percent} degli spettatori", + "relatedTitles": "Titoli correlati", + "background": "Contesto" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} risultato", + "other": "${n} risultati" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Modifica regola di sincronizzazione", "removeSyncRule": "Rimuovi regola di sincronizzazione", "removeSyncRuleConfirm": "Interrompere la sincronizzazione di \"${title}\"? Gli episodi scaricati verranno mantenuti.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Interrompere la sincronizzazione di \"${title}\"?", + "deleteSyncRuleDownloads": "Elimina anche i download associati", + "deleteSyncRuleDownloadsDescription": "I download usati da un'altra regola di sincronizzazione o da un altro profilo verranno conservati.", "syncRuleCreated": "Regola di sincronizzazione creata — ${count} episodi non visti mantenuti", "syncRuleUpdated": "Regola di sincronizzazione aggiornata", "syncRuleRemoved": "Regola di sincronizzazione rimossa", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Regola di sincronizzazione e download associati rimossi", + "syncRuleCleanupBusy": "Le regole di sincronizzazione sono in fase di aggiornamento. Riprova tra un momento.", + "syncRuleCleanupUnavailable": "Non è stato possibile identificare in sicurezza i download associati. Riconnetti il server e riprova, oppure rimuovi la regola senza eliminare i download.", "syncedNewEpisodes": "${count} nuovi episodi sincronizzati per ${title}", "activeSyncRules": "Regole di sincronizzazione", "noSyncRules": "Nessuna regola di sincronizzazione", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Attiva Plezy su ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Aggiungi server ${product}", "serverUrls": "URL del server", "serverUrlsHelper": "Sono consentiti più URL, separati da virgole.", "findServer": "Trova il server", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Ricerca di server ${product} locali...", + "localMediaBrowserServers": "Server ${product} locali", "username": "Nome utente", "password": "Password", "signIn": "Accedi", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Accedi con Plex", "pinExpired": "PIN scaduto prima dell'accesso. Riprova.", "failedToRegisterAccount": "Registrazione account non riuscita: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Inserisci l'URL del server ${product}", "addConnectionTitle": "Aggiungi connessione", "addConnectionTitleScoped": "Aggiungi a ${name}", "signInWithPlexCard": "Accedi con Plex", "signInWithPlexCardSubtitle": "Autorizza questo dispositivo. I server condivisi vengono aggiunti.", "signInWithPlexCardSubtitleScoped": "Autorizza un account Plex. Gli utenti Home diventano profili.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Connettiti a ${product}", + "connectToMediaBrowserCardSubtitle": "Inserisci l'URL del server, il nome utente e la password.", + "connectToMediaBrowserCardSubtitleScoped": "Accedi al tuo server ${product}. Associato a ${name}.", "borrowFromAnotherProfile": "Prendi in prestito da un altro profilo", "borrowFromAnotherProfileSubtitle": "Riutilizza la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN." } diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index e6794cef..df572b51 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "認証を待っています…\nブラウザでサインインしてください。", "useBrowser": "ブラウザを使用", "or": "または", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "${product}に接続", "useQuickConnect": "Quick Connect を使う", "quickConnectInstructions": "JellyfinでQuick Connectを開き、このコードを入力してください。", "quickConnectWaiting": "承認を待っています…", @@ -66,17 +66,17 @@ "exitFullscreen": "フルスクリーンを終了", "pressBackAgainToExit": "もう一度押すと終了します", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "批評家", + "audience": "観客", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes 批評家", + "rottenTomatoesAudience": "Rotten Tomatoes 観客" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "ダーク", "oledTheme": "OLED", "libraryDensity": "ライブラリの密度", - "displayScale": "", + "displayScale": "表示スケール", "compact": "コンパクト", "comfortable": "ゆったり", "tvCornerSpotlightBackdrop": "画面隅の注目コンテンツ背景", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "自動(推奨)", "bufferSizeWarning": "${heap}MBのメモリが利用可能です。${size}MBのバッファは再生に影響する可能性があります。", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "再生バッファー", + "playbackBufferAuto": "自動(推奨)", + "playbackBufferLarge": "大", + "playbackBufferExtraLarge": "特大", + "playbackBufferDescription": "不安定な接続に備えてより多くのバッファーを使用します。バッファーサイズによっても制限されます。", "defaultQualityTitle": "デフォルト画質", "musicQualityTitle": "音楽の音質", "subtitleStyling": "字幕スタイル", @@ -208,9 +208,9 @@ "debugLoggingDescription": "トラブルシューティング用の詳細なログを有効化", "viewLogs": "ログを表示", "viewLogsDescription": "アプリケーションログを表示", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "画像キャッシュをクリア", + "clearImageCacheDescription": "キャッシュされたアートワークとサムネイルをクリアします。再度ダウンロードされるまで画像の読み込みが遅くなる場合があります。", + "clearImageCacheSuccess": "画像キャッシュを正常にクリアしました", "resetSettings": "設定をリセット", "resetSettingsDescription": "設定を既定に戻します。元に戻せません。", "resetSettingsSuccess": "設定を正常にリセットしました", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "ファイル情報", - "overview": "", + "overview": "概要", "video": "映像", "audio": "音声", "subtitles": "字幕", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "埋め込み画像", + "dataStreams": "データストリーム", + "lyrics": "歌詞", "file": "ファイル", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "添付ファイル", + "delivery": "配信", + "versionCounter": "バージョン ${index} / ${count}", + "fileCounter": "ファイル ${index} / ${count}", + "noStreams": "サーバーはこのファイルにストリームがないと報告しました。", + "copyPath": "パスをコピー", + "pathCopied": "ファイルパスをコピーしました", "codec": "コーデック", - "codecTag": "", + "codecTag": "コーデックタグ", "resolution": "解像度", - "codedResolution": "", + "codedResolution": "符号化解像度", "bitrate": "ビットレート", "frameRate": "フレームレート", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "回転", + "comment": "コメント", + "audioDescription": "音声解説", + "headerCompression": "ヘッダー圧縮", + "sidecarFile": "サイドカーファイル", + "transportTimestamp": "トランスポートタイムスタンプ", + "displayOffset": "表示オフセット", + "previewFailureCode": "プレビュー失敗コード", + "previewRetries": "プレビュー再試行回数", "aspectRatio": "アスペクト比", - "pixelAspectRatio": "", + "pixelAspectRatio": "ピクセルアスペクト比", "profile": "プロファイル", - "level": "", + "level": "レベル", "bitDepth": "ビット深度", - "pixelFormat": "", + "pixelFormat": "ピクセルフォーマット", "colorSpace": "色空間", "colorRange": "色範囲", "colorPrimaries": "色原色", - "colorTransfer": "", + "colorTransfer": "カラートランスファー", "chromaSubsampling": "クロマサブサンプリング", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "クロマ位置", + "scanType": "スキャンタイプ", + "interlaced": "インターレース", + "anamorphic": "アナモルフィック", + "referenceFrames": "参照フレーム数", + "dynamicRange": "ダイナミックレンジ", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision レベル", + "dolbyVisionVersion": "Dolby Vision バージョン", + "dolbyVisionLayers": "Dolby Vision レイヤー", + "baseLayerCompatibility": "ベースレイヤー互換性", + "avcBitstream": "AVC ビットストリーム", + "nalLengthSize": "NAL 長さサイズ", + "scalingMatrix": "カスタムスケーリングマトリックス", + "streamIdentifier": "ストリーム識別子", + "streamIndex": "ストリームインデックス", + "streamId": "ストリーム ID", + "language": "言語", + "languageCode": "言語コード", + "streamTitle": "トラックタイトル", "channels": "チャンネル", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "サンプルレート", + "spatialAudio": "空間オーディオ", + "textBased": "テキストベース", + "subtitleFormat": "サイドカーフォーマット", + "provider": "プロバイダー", + "matchScore": "一致スコア", + "externalDelivery": "個別に配信可能", + "sidecarPath": "サイドカーパス", + "sourceStream": "コピー元", + "temporary": "一時的", + "timeBase": "タイムベース", "overallBitrate": "全体ビットレート", "path": "パス", - "fileName": "", + "fileName": "ファイル名", "size": "サイズ", - "totalSize": "", + "totalSize": "合計サイズ", "container": "コンテナ", "duration": "長さ", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "プレビューサムネイル", + "previewIndex": "プレビューインデックス", + "packetLength": "パケット長", + "filePresent": "ファイルあり", + "fileReadable": "サーバーから読み取り可能", + "streamPath": "ストリームパス", "optimizedForStreaming": "ストリーミング最適化", "has64bitOffsets": "64ビットオフセット", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "プロトコル", + "mediaType": "メディアタイプ", + "sourceKind": "ソース種別", + "optimizedVersion": "最適化バージョン", + "optimizationTarget": "最適化ターゲット", + "deletedAt": "削除済み", + "remoteSource": "リモートソース", + "infiniteStream": "無限ストリーム", + "directPlay": "ダイレクト再生", + "directStream": "ダイレクトストリーム", + "transcoding": "トランスコード", + "etag": "ETag", + "versionId": "バージョン ID", + "fileId": "ファイル ID", + "defaultAudioTrack": "デフォルト音声トラック", + "defaultSubtitleTrack": "デフォルト字幕トラック", + "subtitlesOff": "オフ", + "flagDefault": "デフォルト", + "flagForced": "強制", + "flagSelected": "選択済み", + "flagExternal": "外部", + "flagHearingImpaired": "聴覚障害者向け", + "flagDub": "吹替", + "flagOriginal": "オリジナル" }, "mediaMenu": { "markAsWatched": "視聴済みにする", @@ -524,32 +524,32 @@ "shufflePlay": "シャッフル再生", "shuffleNotAvailableOffline": "オフラインではシャッフルを利用できません", "fileInfo": "ファイル情報", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "サーバーからエピソードを削除", + "deleteSeasonFromServer": "サーバーからシーズンを削除", + "deleteShowFromServer": "サーバーから番組を削除", + "deleteMovieFromServer": "サーバーから映画を削除", + "deleteEpisodeTitle": "このエピソードを削除しますか?", + "deleteSeasonTitle": "このシーズンを削除しますか?", + "deleteShowTitle": "この番組を削除しますか?", + "deleteMovieTitle": "この映画を削除しますか?", + "deleteEpisodeConfirm": "エピソードを削除", + "deleteSeasonConfirm": "シーズンを削除", + "deleteShowConfirm": "番組を削除", + "deleteMovieConfirm": "映画を削除", + "deleteAnyway": "それでも削除", + "confirmDeleteTarget": "サーバーから「${title}」を完全に削除しますか?", "deleteMultipleWarning": "すべてのエピソードとそのファイルが含まれます。", "deleteEpisodeCountWarning": { - "other": "" + "other": "中の全${n}エピソードとそのファイルが削除されます。" }, "deleteMultiPartWarning": { - "other": "" + "other": "このアイテムは${n}個のファイルにまたがって保存されており、すべて削除されます。" }, "deleteSharedFileHeading": { - "other": "" + "other": "同じファイルに保存されている他の${n}エピソードも削除されます:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezyは削除対象のファイルを確認できなかったため、上記のアイテム以上に削除される可能性があります。キャンセルして再試行するか、それでも削除してください。", + "deleteScopeUnverifiedNoFileInfo": "サーバーがこのアイテムのファイル情報を提供しなかったため、Plezyは削除対象のファイルを確認できません。上記のアイテム以上に削除される可能性があります。", "mediaDeletedSuccessfully": "メディアアイテムを正常に削除しました", "mediaFailedToDelete": "メディアアイテムの削除に失敗しました", "rate": "評価", @@ -625,9 +625,9 @@ "playNext": "次を再生", "playButton": "再生", "pauseButton": "一時停止", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "一時停止中", + "playbackResumed": "再生中", + "loadingVideo": "動画を読み込み中", "showPlaybackControls": "再生コントロールを表示", "hidePlaybackControls": "再生コントロールを非表示", "seekBackwardButton": "${seconds}秒戻る", @@ -698,7 +698,7 @@ }, "removedFromContinueWatching": "視聴中から削除しました", "errorLoading": "エラー: ${error}", - "searchPartialResults": "", + "searchPartialResults": "一部のメディアサーバーを検索できませんでした。利用可能な結果を表示しています。", "streamInterrupted": "ストリームが中断されました。再生を押すかシークして再試行してください。", "liveStreamInterrupted": "ライブストリームが中断されました。再生を押して再試行してください。", "fileInfoNotAvailable": "ファイル情報が利用できません", @@ -737,8 +737,8 @@ "switchingToCompatiblePlayer": "互換性のあるプレーヤーに切り替え中…", "serverLimitTitle": "再生に失敗しました", "serverLimitBody": "サーバーエラー(HTTP 500)。帯域幅/トランスコード制限により拒否された可能性があります。所有者に調整を依頼してください。", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "ファイルを利用できません", + "mediaUnreadableBody": "サーバーはこのアイテムを見つけましたが、そのファイルを読み取れませんでした(HTTP 404)。ファイルが移動・削除されたか、ストレージがオフラインの可能性があります。サーバーの管理者にファイルの確認とライブラリの再スキャンを依頼してください。", "logsUploaded": "ログをアップロードしました", "logsUploadFailed": "ログのアップロードに失敗しました", "logId": "ログID" @@ -857,8 +857,8 @@ "sessionExpiredOne": "${name} のセッションの有効期限が切れました", "sessionExpiredMany": "${count} 台のサーバーのセッションの有効期限が切れました", "signInAgain": "再度サインイン", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "${product}接続を編集", + "editMediaBrowserIntro": "${serverName}のURLを追加または削除します。Plezyは到達可能なURLのうち、レイテンシーが最も低いものを使用します。" }, "discover": { "title": "探す", @@ -888,7 +888,7 @@ }, "errors": { "searchFailed": "検索に失敗しました: ${error}", - "searchUnavailable": "", + "searchUnavailable": "検索中にメディアサーバーへ接続できませんでした。", "connectionTimeout": "${context}の読み込み中に接続がタイムアウトしました", "connectionFailed": "メディアサーバーに接続できません", "unableToLoad": "${context}を読み込めませんでした。もう一度お試しください。", @@ -1016,36 +1016,36 @@ "uploadLogs": "ログをアップロード" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezyを起動できませんでした", + "failedBody": "起動中に問題が発生しました。以下の詳細に失敗の原因が示されています。", + "failedBodyRepairable": "Plezyの保存済み設定ファイルが破損しているため、Plezyを起動する前に再構築する必要があります。再試行しても解決しません —「ストレージを修復」を選択してください。", + "phaseLabel": "ステップ", + "showDetails": "詳細を表示", + "hideDetails": "詳細を非表示", + "copyDetails": "詳細をコピー", + "detailsCopied": "詳細をクリップボードにコピーしました", + "uploadDetails": "詳細をアップロード", + "repairStorage": "ストレージを修復", + "repairTitle": "保存データを修復しますか?", + "repairBodyCommon": "Plezyの設定ファイルが破損しており読み取れません。修復するとすべての設定がデフォルトにリセットされます。", + "repairBodyOneCredential": "保存済みのサインインの1つが破損しており読み取れません。修復するとその1つだけが削除され、他の設定には影響しません。", + "repairBodySignInsKept": "サーバーとプロフィールはサインインしたままになります。", + "repairBodySignInsLost": "保存済みのサインインを保護するキーをこのファイルから復元できないため、すべてのサーバーとプロフィールに再度サインインする必要があります。メディアサーバー上のデータには影響ありません。", + "repairBodySessionsUncertain": "トラッカー(MAL、AniList、Simkl、Trakt)とSeerrは別途保存されており、保持されるかどうかは不明です。Plezyは保持した内容を正確にお知らせします。", + "repairConfirm": "修復", + "repairSucceeded": "ストレージを修復しました", + "repairNeedsRestart": "ストレージを修復しました — 再起動が必要です", + "restartRequiredBody": "データは修復されましたが、Plezyはそれを使用する前に再起動する必要があります。Plezyを閉じて再度開いてください。", + "quitPlezy": "Plezyを終了", + "repairFailed": "修復に失敗しました", + "repairKeptSignIns": "サーバーとプロフィールはサインインしたままです。", + "repairLostSignIns": "保存済みのサインインを保護するキーを復元できませんでした。すべてのサーバーとプロフィールに再度サインインする必要があります。", + "repairLostSessions": "少なくとも1つのトラッカーまたはSeerr接続が失われたため、再接続が必要です。", + "backupTitle": "破損したファイルのコピーを保持しました", + "backupWarning": "このコピーにはサインイン資格情報が含まれています。アップロードや共有はしないでください。", + "deleteBackup": "コピーを削除", + "backupDeleted": "コピーを削除しました。", + "previousFailureTitle": "前回、Plezyは起動に失敗しました" }, "licenses": { "relatedPackages": "関連パッケージ", @@ -1102,131 +1102,131 @@ "searchPrompt": "${source}で映画やテレビ番組を検索します。", "searchFailed": "検索に失敗しました。接続を確認してもう一度お試しください。", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "人気 #${n}", + "rankAiring": "放送中 #${n}", + "rankRated": "評価 #${n}", + "rankFavorited": "お気に入り #${n}", + "rankTrending": "急上昇 #${n}", + "rankSeasonal": "#${n}(${season})", + "watchingNow": "${n}人視聴中", + "available": "視聴可能", + "partiallyAvailable": "一部視聴可能", + "availableIn4k": "4K対応", + "requested": "リクエスト済み", + "pendingApproval": "承認待ち", + "processing": "処理中", + "declined": "却下", + "requestFailed": "リクエスト失敗", + "requested4k": "4Kリクエスト済み", + "seasonsAvailable": "シーズン ${available}/${total}", + "nextEpisodeIn": "エピソード${episode} あと${duration}", + "nextAiringIn": "次回 あと${duration}", + "episodesShort": "${n}話", + "minutesPerEpisode": "${n}分/話", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "登録者 ${n}人", + "viewersDay": "本日${n}人が視聴", + "viewersWeek": "今週${n}人が視聴", + "viewersMonth": "今月${n}人が視聴", + "viewersYear": "今年${n}人が視聴", + "viewersAllTime": "累計視聴者${n}人", + "planning": "${n}人が視聴予定", + "favorited": "お気に入り ${n}件", + "dropRate": "${percent}が視聴中止", "comments": { - "other": "" + "other": "コメント ${n}件" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "投票 ${n}件", + "watching": "${n}人が視聴中", + "completed": "${n}人が視聴済み", + "onHold": "${n}人が保留中", + "dropped": "${n}人が視聴中止" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "冬", + "spring": "春", + "summer": "夏", + "fall": "秋", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV短編", + "movie": "映画", + "special": "スペシャル", + "ova": "OVA", + "ona": "ONA", + "music": "音楽", + "other": "その他" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "オリジナル", + "manga": "漫画", + "lightNovel": "ライトノベル", + "novel": "小説", + "visualNovel": "ビジュアルノベル", + "game": "ゲーム", + "webComic": "Web漫画", + "musicRelease": "音楽", + "otherMedia": "その他" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "監督", + "writer": "脚本", + "producer": "プロデューサー", + "creator": "原作者", + "composer": "作曲家" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "前日譚", + "sequel": "続編", + "sideStory": "サイドストーリー", + "spinOff": "スピンオフ", + "alternativeVersion": "別バージョン", + "summary": "総集編", + "parentStory": "親作品", + "adaptation": "原作", + "other": "関連作品" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "${day} ${time}に放送", + "broadcastWithZone": "${day} ${time}(${timezone})に放送", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "原題", + "alsoKnownAs": "別名", + "studios": "制作会社", + "country": "国", + "language": "言語", + "released": "公開日", + "physicalRelease": "ディスク発売", + "ended": "放送終了", + "addedOn": "${date}に追加", + "yourRating": "あなたの評価", + "budget": "制作費", + "revenue": "興行収入", + "contentAdvisory": "年齢区分", + "tags": "タグ", + "revealSpoilerTags": "ネタバレタグを表示", + "links": "リンク", + "watchOn": "視聴先", + "watchTrailer": "予告編を見る", + "openOn": "${site}で開く", + "crew": "スタッフ", + "ratings": "評価", + "schedule": "放送予定", "recommendedByUsers": { - "other": "" + "other": "${n}人のユーザーがおすすめ" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "${who}がおすすめ", + "favoritedBy": "${who}がお気に入り登録", + "unairedEpisodes": "未放送 ${n}話", + "recommendedByPercent": "視聴者の${percent}がおすすめ", + "relatedTitles": "関連作品", + "background": "背景" }, "totalResults": { - "other": "" + "other": "${n}件の結果" } }, "liveTv": { @@ -1492,15 +1492,15 @@ "editSyncRule": "同期ルールを編集", "removeSyncRule": "同期ルールを削除", "removeSyncRuleConfirm": "「${title}」の同期を停止しますか?ダウンロード済みのエピソードは保持されます。", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "「${title}」の同期を停止しますか?", + "deleteSyncRuleDownloads": "関連するダウンロードも削除", + "deleteSyncRuleDownloadsDescription": "別の同期ルールやプロフィールで使用されているダウンロードは保持されます。", "syncRuleCreated": "同期ルールを作成しました — 未視聴のエピソードを${count}件保持", "syncRuleUpdated": "同期ルールを更新しました", "syncRuleRemoved": "同期ルールを削除しました", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "同期ルールと関連するダウンロードを削除しました", + "syncRuleCleanupBusy": "同期ルールが更新中です。しばらくしてからもう一度お試しください。", + "syncRuleCleanupUnavailable": "関連するダウンロードを安全に特定できませんでした。サーバーに再接続して再試行するか、ダウンロードを削除せずにルールを削除してください。", "syncedNewEpisodes": "${title}の新しいエピソードを${count}件同期しました", "activeSyncRules": "同期ルール", "noSyncRules": "同期ルールなし", @@ -1865,7 +1865,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "${service} で Plezy を有効化", @@ -1898,12 +1898,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product}サーバーを追加", "serverUrls": "サーバーURL", "serverUrlsHelper": "複数のURLをカンマ区切りで入力できます。", "findServer": "サーバーを検索", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "ローカルの${product}サーバーを検索中…", + "localMediaBrowserServers": "ローカルの${product}サーバー", "username": "ユーザー名", "password": "パスワード", "signIn": "サインイン", @@ -1915,15 +1915,15 @@ "addPlexTitle": "Plexでサインイン", "pinExpired": "サインイン前にPINの有効期限が切れました。もう一度お試しください。", "failedToRegisterAccount": "アカウントの登録に失敗しました: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "${product}サーバーのURLを入力してください", "addConnectionTitle": "接続を追加", "addConnectionTitleScoped": "${name}に追加", "signInWithPlexCard": "Plexでサインイン", "signInWithPlexCardSubtitle": "このデバイスを承認します。共有サーバーが追加されます。", "signInWithPlexCardSubtitleScoped": "Plexアカウントを承認します。Homeユーザーはプロフィールになります。", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "${product}に接続", + "connectToMediaBrowserCardSubtitle": "サーバーのURL、ユーザー名、パスワードを入力してください。", + "connectToMediaBrowserCardSubtitleScoped": "${product}サーバーにサインインします。「${name}」に紐付けられます。", "borrowFromAnotherProfile": "別のプロフィールの接続を利用", "borrowFromAnotherProfileSubtitle": "別のプロフィールの接続を再利用します。PINで保護されたプロフィールにはPINが必要です。" } diff --git a/lib/i18n/kk.i18n.json b/lib/i18n/kk.i18n.json index 84709c15..4a111207 100644 --- a/lib/i18n/kk.i18n.json +++ b/lib/i18n/kk.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Растау күтілуде...\nБраузеріңізден кіріңіз.", "useBrowser": "Браузерді пайдалану", "or": "немесе", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "${product} қосылу", "useQuickConnect": "Жылдам қосылуды пайдалану", "quickConnectInstructions": "Jellyfin-де Жылдам қосылуды ашып, осы кодты енгізіңіз.", "quickConnectWaiting": "Растау күтілуде…", @@ -66,17 +66,17 @@ "exitFullscreen": "Толық экраннан шығу", "pressBackAgainToExit": "Шығу үшін артқа түймесін қайтадан басыңыз", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Сыншылар", + "audience": "Көрермендер", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes сыншылары", + "rottenTomatoesAudience": "Rotten Tomatoes көрермендері" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Қараңғы", "oledTheme": "OLED", "libraryDensity": "Кітапхана тығыздығы", - "displayScale": "", + "displayScale": "Дисплей масштабы", "compact": "Тығыз", "comfortable": "Ыңғайлы", "tvCornerSpotlightBackdrop": "Бұрыштық жарық фоны", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} МБ", "bufferSizeAuto": "Автоматты (Ұсынылатын)", "bufferSizeWarning": "${heap} МБ ЖҰД қолжетімді. ${size} МБ буфер ойнатуға әсер етуі мүмкін.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Ойнату буфері", + "playbackBufferAuto": "Авто (ұсынылады)", + "playbackBufferLarge": "Үлкен", + "playbackBufferExtraLarge": "Өте үлкен", + "playbackBufferDescription": "Тұрақсыз қосылыстарға қарсы көбірек буферлейді. Буфер өлшемімен де шектеледі.", "defaultQualityTitle": "Әдепкі сапа", "musicQualityTitle": "Музыка сапасы", "subtitleStyling": "Субтитр баптаулары", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Файл туралы ақпарат", - "overview": "", + "overview": "Шолу", "video": "Видео", "audio": "Аудио", "subtitles": "Субтитрлер", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Кірістірілген суреттер", + "dataStreams": "Деректер ағындары", + "lyrics": "Ән мәтіні", "file": "Файл", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Тіркемелер", + "delivery": "Жеткізу", + "versionCounter": "Нұсқа ${index} / ${count}", + "fileCounter": "Файл ${index} / ${count}", + "noStreams": "Сервер бұл файл үшін ағындар жоқ деп хабарлады.", + "copyPath": "Жолды көшіру", + "pathCopied": "Файл жолы көшірілді", "codec": "Кодек", - "codecTag": "", + "codecTag": "Кодек тегі", "resolution": "Ажыратымдылық", - "codedResolution": "", + "codedResolution": "Кодталған ажыратымдылық", "bitrate": "Биттік жылдамдық (Bitrate)", "frameRate": "Кадр жиілігі", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Бұрылыс", + "comment": "Пікір", + "audioDescription": "Аудио сипаттама", + "headerCompression": "Тақырып қысуы", + "sidecarFile": "Қосалқы файл", + "transportTimestamp": "Транспорт уақыт белгісі", + "displayOffset": "Көрсету ығысуы", + "previewFailureCode": "Алдын ала қарау қате коды", + "previewRetries": "Алдын ала қарау қайталаулары", "aspectRatio": "Тараптар қатынасы", - "pixelAspectRatio": "", + "pixelAspectRatio": "Пиксель пропорциясы", "profile": "Профиль", - "level": "", + "level": "Деңгей", "bitDepth": "Бит тереңдігі", - "pixelFormat": "", + "pixelFormat": "Пиксель форматы", "colorSpace": "Түс кеңістігі", "colorRange": "Түс диапазоны", "colorPrimaries": "Негізгі түстер", - "colorTransfer": "", + "colorTransfer": "Түс тасымалдауы", "chromaSubsampling": "Түстік субдискретизация", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Chroma орналасуы", + "scanType": "Сканерлеу түрі", + "interlaced": "Жоларалық", + "anamorphic": "Анаморфты", + "referenceFrames": "Тірек кадрлар", + "dynamicRange": "Динамикалық диапазон", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision деңгейі", + "dolbyVisionVersion": "Dolby Vision нұсқасы", + "dolbyVisionLayers": "Dolby Vision қабаттары", + "baseLayerCompatibility": "Базалық қабат үйлесімділігі", + "avcBitstream": "AVC бит ағыны", + "nalLengthSize": "NAL ұзындық өлшемі", + "scalingMatrix": "Теңшелетін масштабтау матрицасы", + "streamIdentifier": "Ағын идентификаторы", + "streamIndex": "Ағын индексі", + "streamId": "Ағын ID", + "language": "Тіл", + "languageCode": "Тіл коды", + "streamTitle": "Трек атауы", "channels": "Арналар", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Дискретизация жиілігі", + "spatialAudio": "Кеңістіктік аудио", + "textBased": "Мәтіндік", + "subtitleFormat": "Қосалқы формат", + "provider": "Провайдер", + "matchScore": "Сәйкестік ұпайы", + "externalDelivery": "Бөлек жеткізілуі мүмкін", + "sidecarPath": "Қосалқы файл жолы", + "sourceStream": "Көшірілген көзі", + "temporary": "Уақытша", + "timeBase": "Уақыт негізі", "overallBitrate": "Жалпы биттік жылдамдық", "path": "Жол", - "fileName": "", + "fileName": "Файл атауы", "size": "Көлемі", - "totalSize": "", + "totalSize": "Жалпы өлшемі", "container": "Контейнер", "duration": "Уақыты", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Алдын ала қарау суреттері", + "previewIndex": "Алдын ала қарау индексі", + "packetLength": "Пакет ұзындығы", + "filePresent": "Файл бар", + "fileReadable": "Сервер оқи алады", + "streamPath": "Ағын жолы", "optimizedForStreaming": "Ағынды беру үшін оңтайландырылған", "has64bitOffsets": "64-биттік ығысулар", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Протокол", + "mediaType": "Медиа түрі", + "sourceKind": "Дереккөз түрі", + "optimizedVersion": "Оңтайландырылған нұсқа", + "optimizationTarget": "Оңтайландыру мақсаты", + "deletedAt": "Өшірілген", + "remoteSource": "Қашықтағы дереккөз", + "infiniteStream": "Шексіз ағын", + "directPlay": "Тікелей ойнату", + "directStream": "Тікелей ағын", + "transcoding": "Транскодтау", + "etag": "ETag", + "versionId": "Нұсқа ID", + "fileId": "Файл ID", + "defaultAudioTrack": "Әдепкі аудио трек", + "defaultSubtitleTrack": "Әдепкі субтитр трегі", + "subtitlesOff": "Өшірулі", + "flagDefault": "Әдепкі", + "flagForced": "Мәжбүрлі", + "flagSelected": "Таңдалған", + "flagExternal": "Сыртқы", + "flagHearingImpaired": "Есту қабілеті бұзылғандар үшін", + "flagDub": "Дубляж", + "flagOriginal": "Түпнұсқа" }, "mediaMenu": { "markAsWatched": "Көрілді деп белгілеу", @@ -524,35 +524,35 @@ "shufflePlay": "Араластырып ойнату", "shuffleNotAvailableOffline": "Араластырып ойнату офлайн режимде қолжетімсіз", "fileInfo": "Файл туралы ақпарат", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Бөлімді серверден өшіру", + "deleteSeasonFromServer": "Маусымды серверден өшіру", + "deleteShowFromServer": "Сериалды серверден өшіру", + "deleteMovieFromServer": "Фильмді серверден өшіру", + "deleteEpisodeTitle": "Осы бөлім өшірілсін бе?", + "deleteSeasonTitle": "Осы маусым өшірілсін бе?", + "deleteShowTitle": "Осы сериал өшірілсін бе?", + "deleteMovieTitle": "Осы фильм өшірілсін бе?", + "deleteEpisodeConfirm": "Бөлімді өшіру", + "deleteSeasonConfirm": "Маусымды өшіру", + "deleteShowConfirm": "Сериалды өшіру", + "deleteMovieConfirm": "Фильмді өшіру", + "deleteAnyway": "Бәрібір өшіру", + "confirmDeleteTarget": "${title} серверіңізден толық өшірілсін бе?", "deleteMultipleWarning": "Бұл барлық бөлімдер мен файлдарға әсер етеді.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Бұл ондағы ${n} бөлімді және оның файлын өшіреді.", + "other": "Бұл ондағы барлық ${n} бөлімді және олардың файлдарын өшіреді." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Бұл элемент ${n} файл ретінде сақталған, ол өшіріледі.", + "other": "Бұл элемент ${n} файлда сақталған, олардың барлығы өшіріледі." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "Сол файлда тағы ${n} бөлім сақталған, ол да өшіріледі:", + "other": "Сол файлда тағы ${n} бөлім сақталған, олар да өшіріледі:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy қандай файлдар өшірілетінін тексере алмады, сондықтан ол жоғарыда аталған элементтен артық өшіруі мүмкін. Бас тартып, қайталап көріңіз немесе бәрібір өшіріңіз.", + "deleteScopeUnverifiedNoFileInfo": "Серверіңіз бұл элемент үшін файл мәліметтерін ұсынбады, сондықтан Plezy қандай файлдар өшірілетінін тексере алмайды. Ол жоғарыда аталған элементтен артық өшіруі мүмкін.", "mediaDeletedSuccessfully": "Медиа элементі сәтті өшірілді", "mediaFailedToDelete": "Медиа элементін өшіру мүмкін болмады", "rate": "Бағалау", @@ -628,9 +628,9 @@ "playNext": "Келесіні ойнату", "playButton": "Ойнату", "pauseButton": "Кідірту", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Кідіртілді", + "playbackResumed": "Ойнатылуда", + "loadingVideo": "Бейне жүктелуде", "showPlaybackControls": "Басқару элементтерін көрсету", "hidePlaybackControls": "Басқару элементтерін жасыру", "seekBackwardButton": "${seconds} секунд артқа айналдыру", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Үйлесімді ойнатқышқа ауысуда...", "serverLimitTitle": "Ойнату қатесі", "serverLimitBody": "Сервер қатесі (HTTP 500). Шектеу бұл сеансты қабылдамады.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Файл қолжетімсіз", + "mediaUnreadableBody": "Сервер бұл элементті тапты, бірақ оның файлын оқи алмады (HTTP 404). Файл жылжытылған, өшірілген немесе оның сақтау орны қолжетімсіз болуы мүмкін. Сервер иесінен файлды тексеріп, кітапхананы қайта сканерлеуді сұраңыз.", "logsUploaded": "Журналдар жүктелді", "logsUploadFailed": "Журналдарды жүктеу мүмкін болмады", "logId": "Журнал ID-сі" @@ -861,8 +861,8 @@ "sessionExpiredOne": "${name} үшін сеанс мерзімі өтті", "sessionExpiredMany": "${count} сервер үшін сеанс мерзімі өтті", "signInAgain": "Қайтадан кіру", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "${product} қосылымын өңдеу", + "editMediaBrowserIntro": "${serverName} үшін URL мекенжайларды қосыңыз немесе өшіріңіз. Plezy ең төмен кідірісі бар қолжетімді URL мекенжайды пайдаланады." }, "discover": { "title": "Шолу", @@ -1020,36 +1020,36 @@ "uploadLogs": "Журналдарды жүктеу" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy іске қосылмады", + "failedBody": "Іске қосу кезінде қате орын алды. Төмендегі мәліметтер ненің сәтсіз аяқталғанын көрсетеді.", + "failedBodyRepairable": "Plezy сақталған баптаулар файлы зақымдалған және Plezy іске қосылмас бұрын оны қайта құру қажет. Қайталау көмектеспейді — «Сақтауды қалпына келтіру» тармағын таңдаңыз.", + "phaseLabel": "Қадам", + "showDetails": "Мәліметтерді көрсету", + "hideDetails": "Мәліметтерді жасыру", + "copyDetails": "Мәліметтерді көшіру", + "detailsCopied": "Мәліметтер алмасу буферіне көшірілді", + "uploadDetails": "Мәліметтерді жүктеп жіберу", + "repairStorage": "Сақтауды қалпына келтіру", + "repairTitle": "Сақталған деректер қалпына келтірілсін бе?", + "repairBodyCommon": "Plezy баптаулар файлы зақымдалған және оқылмайды. Қалпына келтіру барлық баптауды әдепкі мәнге қайтарады.", + "repairBodyOneCredential": "Бір сақталған кіру деректері зақымдалған және оқылмайды. Қалпына келтіру тек соны өшіреді; қалған баптауларыңызға тиіспейді.", + "repairBodySignInsKept": "Серверлеріңіз бен профильдеріңіз кірген күйінде қалады.", + "repairBodySignInsLost": "Сақталған кіру деректерін қорғайтын кілт осы файлдан қалпына келтірілмейді, сондықтан әрбір сервер мен профильге қайта кіруге тура келеді. Медиа серверіңіздегі ештеңеге әсер етілмейді.", + "repairBodySessionsUncertain": "Tracker-лар (MAL, AniList, Simkl, Trakt) және Seerr бөлек сақталады және сақталуы да, сақталмауы да мүмкін. Plezy не сақталғанын нақты айтады.", + "repairConfirm": "Қалпына келтіру", + "repairSucceeded": "Сақтау қалпына келтірілді", + "repairNeedsRestart": "Сақтау қалпына келтірілді — қайта іске қосу қажет", + "restartRequiredBody": "Деректеріңіз қалпына келтірілді, бірақ Plezy оларды пайдаланар алдында жаңадан іске қосылуы керек. Plezy жабыңыз да, қайта ашыңыз.", + "quitPlezy": "Plezy бағдарламасынан шығу", + "repairFailed": "Қалпына келтіру сәтсіз аяқталды", + "repairKeptSignIns": "Серверлеріңіз бен профильдеріңіз әлі кірген күйде.", + "repairLostSignIns": "Сақталған кіру деректерін қорғайтын кілт қалпына келтірілмеді. Әрбір сервер мен профильге қайта кіруге тура келеді.", + "repairLostSessions": "Кем дегенде бір tracker немесе Seerr қосылымы жоғалды, оны қайта қосу қажет.", + "backupTitle": "Зақымдалған файлдың көшірмесі сақталды", + "backupWarning": "Онда сіздің кіру деректеріңіз бар. Оны жүктеп жібермеңіз немесе бөліспеңіз.", + "deleteBackup": "Көшірмені өшіру", + "backupDeleted": "Көшірме өшірілді.", + "previousFailureTitle": "Plezy соңғы рет іске қосыла алмады" }, "licenses": { "relatedPackages": "Байланысты пакеттер", @@ -1107,134 +1107,134 @@ "searchPrompt": "${source} арқылы фильмдер мен сериалдарды іздеңіз.", "searchFailed": "Іздеу қатесі. Қосылымды тексеріңіз.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} танымал", + "rankAiring": "#${n} эфирде", + "rankRated": "#${n} бағаланған", + "rankFavorited": "#${n} таңдаулы", + "rankTrending": "#${n} трендте", + "rankSeasonal": "#${n} — ${season}", + "watchingNow": "${n} қарауда", + "available": "Қолжетімді", + "partiallyAvailable": "Жартылай қолжетімді", + "availableIn4k": "4K қолжетімді", + "requested": "Сұралған", + "pendingApproval": "Растау күтілуде", + "processing": "Өңделуде", + "declined": "Қабылданбады", + "requestFailed": "Сұрау сәтсіз аяқталды", + "requested4k": "4K сұралған", + "seasonsAvailable": "${available}/${total} маусым", + "nextEpisodeIn": "${episode}-бөлім ${duration} ішінде", + "nextAiringIn": "Келесісі ${duration} ішінде", + "episodesShort": "${n} бөл.", + "minutesPerEpisode": "${n} мин/бөл.", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} тізімде", + "viewersDay": "Бүгін ${n} көрді", + "viewersWeek": "Осы аптада ${n} көрді", + "viewersMonth": "Осы айда ${n} көрді", + "viewersYear": "Осы жылы ${n} көрді", + "viewersAllTime": "${n} көрермен", + "planning": "${n} көруді жоспарлауда", + "favorited": "${n} таңдаулы", + "dropRate": "${percent} тастап кетті", "comments": { - "one": "", - "other": "" + "one": "${n} пікір", + "other": "${n} пікір" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} дауыс", + "watching": "${n} қарап жатыр", + "completed": "${n} аяқтады", + "onHold": "${n} кейінге қалдырды", + "dropped": "${n} тастады" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Қыс", + "spring": "Көктем", + "summer": "Жаз", + "fall": "Күз", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "ТВ", + "tvShort": "Қысқа ТВ", + "movie": "Фильм", + "special": "Арнайы", + "ova": "OVA", + "ona": "ONA", + "music": "Музыка", + "other": "Басқа" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Түпнұсқа", + "manga": "Манга", + "lightNovel": "Ранобэ", + "novel": "Роман", + "visualNovel": "Визуалды роман", + "game": "Ойын", + "webComic": "Веб-комикс", + "musicRelease": "Музыка", + "otherMedia": "Басқа" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Режиссер", + "writer": "Сценарист", + "producer": "Продюсер", + "creator": "Жасаушы", + "composer": "Композитор" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Приквел", + "sequel": "Сиквел", + "sideStory": "Жанама оқиға", + "spinOff": "Спин-офф", + "alternativeVersion": "Балама нұсқа", + "summary": "Қысқаша мазмұны", + "parentStory": "Негізгі оқиға", + "adaptation": "Экранизация", + "other": "Қатысты" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "${day} күні ${time} көрсетіледі", + "broadcastWithZone": "${day} күні ${time} ${timezone} көрсетіледі", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Түпнұсқа атауы", + "alsoKnownAs": "Басқа атаулары", + "studios": "Студиялар", + "country": "Ел", + "language": "Тіл", + "released": "Шығарылған", + "physicalRelease": "Дискіде", + "ended": "Аяқталды", + "addedOn": "${date} қосылды", + "yourRating": "Сіздің бағаңыз", + "budget": "Бюджет", + "revenue": "Кассалық жиын", + "contentAdvisory": "Жас шектеуі", + "tags": "Тегтер", + "revealSpoilerTags": "Спойлер тегтерін көрсету", + "links": "Сілтемелер", + "watchOn": "Мына жерде қарау:", + "watchTrailer": "Трейлерді қарау", + "openOn": "${site} сайтында ашу", + "crew": "Ұжым", + "ratings": "Бағалаулар", + "schedule": "Кесте", "recommendedByUsers": { - "one": "", - "other": "" + "one": "${n} пайдаланушы ұсынды", + "other": "${n} пайдаланушы ұсынды" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "${who} ұсынды", + "favoritedBy": "${who} таңдаулыға қосты", + "unairedEpisodes": "${n} әлі көрсетілмеген", + "recommendedByPercent": "Көрермендердің ${percent} ұсынады", + "relatedTitles": "Қатысты атаулар", + "background": "Фон" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} нәтиже", + "other": "${n} нәтиже" } }, "liveTv": { @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Plezy-ді ${service} қызметінде белсендіру", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product} серверін қосу", "serverUrls": "Сервер URL-дері", "serverUrlsHelper": "Үтірмен бөлінген бірнеше URL мекенжайына рұқсат етіледі.", "findServer": "Серверді табу", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Жергілікті ${product} серверлері ізделуде...", + "localMediaBrowserServers": "Жергілікті ${product} серверлері", "username": "Пайдаланушы аты", "password": "Құпия сөз", "signIn": "Кіру", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Plex арқылы кіру", "pinExpired": "PIN код мерзімі өтті.", "failedToRegisterAccount": "Тіркелгіні тіркеу қатесі: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "${product} серверінің URL мекенжайын енгізіңіз", "addConnectionTitle": "Қосылым қосу", "addConnectionTitleScoped": "${name} профиліне қосу", "signInWithPlexCard": "Plex арқылы кіру", "signInWithPlexCardSubtitle": "Осы құрылғыны авторизациялау.", "signInWithPlexCardSubtitleScoped": "Plex тіркелгісін авторизациялау.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "${product} қосылу", + "connectToMediaBrowserCardSubtitle": "Сервер URL мекенжайын, пайдаланушы атын және құпия сөзді енгізіңіз.", + "connectToMediaBrowserCardSubtitleScoped": "${product} серверіне кіріңіз. ${name} тіркелгісіне байланыстырылады.", "borrowFromAnotherProfile": "Басқа профильден алу", "borrowFromAnotherProfileSubtitle": "Басқа профильдің қосылымын қайта пайдалану." } diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index 18c3f9b9..d322d220 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "인증 대기 중...\n브라우저에서 로그인하세요.", "useBrowser": "브라우저 사용", "or": "또는", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "${product}에 연결", "useQuickConnect": "Quick Connect 사용", "quickConnectInstructions": "Jellyfin에서 Quick Connect를 열고 이 코드를 입력하세요.", "quickConnectWaiting": "승인 대기 중…", @@ -66,17 +66,17 @@ "exitFullscreen": "전체 화면 종료", "pressBackAgainToExit": "한 번 더 누르면 종료됩니다", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "평론가", + "audience": "관객", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes 평론가", + "rottenTomatoesAudience": "Rotten Tomatoes 관객" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "다크", "oledTheme": "OLED", "libraryDensity": "라이브러리 표시 밀도", - "displayScale": "", + "displayScale": "표시 배율", "compact": "조밀하게", "comfortable": "여유롭게", "tvCornerSpotlightBackdrop": "모서리 스포트라이트 배경", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "자동 (권장)", "bufferSizeWarning": "${heap}MB 메모리를 사용할 수 있습니다. ${size}MB 버퍼는 재생에 영향을 줄 수 있습니다.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "재생 버퍼", + "playbackBufferAuto": "자동 (권장)", + "playbackBufferLarge": "대형", + "playbackBufferExtraLarge": "초대형", + "playbackBufferDescription": "불안정한 연결에 대비해 더 많은 버퍼를 사용합니다. 버퍼 크기에 의해서도 제한됩니다.", "defaultQualityTitle": "기본 화질", "musicQualityTitle": "음악 음질", "subtitleStyling": "자막 스타일", @@ -208,9 +208,9 @@ "debugLoggingDescription": "문제 해결을 위해 상세 로깅 활성화", "viewLogs": "로그 보기", "viewLogsDescription": "애플리케이션 로그 확인", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "이미지 캐시 지우기", + "clearImageCacheDescription": "캐시된 아트워크와 썸네일을 지웁니다. 다시 다운로드할 때까지 이미지가 느리게 로드될 수 있습니다.", + "clearImageCacheSuccess": "이미지 캐시를 성공적으로 지웠습니다", "resetSettings": "설정 재설정", "resetSettingsDescription": "기본 설정으로 복원합니다. 되돌릴 수 없습니다.", "resetSettingsSuccess": "설정 재설정 성공", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "파일 정보", - "overview": "", + "overview": "개요", "video": "비디오", "audio": "오디오", "subtitles": "자막", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "내장 이미지", + "dataStreams": "데이터 스트림", + "lyrics": "가사", "file": "파일", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "첨부 파일", + "delivery": "재생 방식", + "versionCounter": "버전 ${index} / ${count}", + "fileCounter": "파일 ${index} / ${count}", + "noStreams": "서버에서 이 파일에 대한 스트림 정보를 보고하지 않았습니다.", + "copyPath": "경로 복사", + "pathCopied": "파일 경로가 복사되었습니다", "codec": "코덱", - "codecTag": "", + "codecTag": "코덱 태그", "resolution": "해상도", - "codedResolution": "", + "codedResolution": "코딩 해상도", "bitrate": "비트레이트", "frameRate": "프레임 속도", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "회전", + "comment": "주석", + "audioDescription": "오디오 설명", + "headerCompression": "헤더 압축", + "sidecarFile": "사이드카 파일", + "transportTimestamp": "전송 타임스탬프", + "displayOffset": "표시 오프셋", + "previewFailureCode": "미리보기 오류 코드", + "previewRetries": "미리보기 재시도 횟수", "aspectRatio": "종횡비", - "pixelAspectRatio": "", + "pixelAspectRatio": "픽셀 종횡비", "profile": "프로파일", - "level": "", + "level": "레벨", "bitDepth": "비트 심도", - "pixelFormat": "", + "pixelFormat": "픽셀 포맷", "colorSpace": "색 공간", "colorRange": "색 범위", "colorPrimaries": "색 원색", - "colorTransfer": "", + "colorTransfer": "색상 전송", "chromaSubsampling": "색차 서브샘플링", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "크로마 위치", + "scanType": "주사 방식", + "interlaced": "비월 주사", + "anamorphic": "아나모픽", + "referenceFrames": "참조 프레임", + "dynamicRange": "동적 범위", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision 레벨", + "dolbyVisionVersion": "Dolby Vision 버전", + "dolbyVisionLayers": "Dolby Vision 레이어", + "baseLayerCompatibility": "베이스 레이어 호환성", + "avcBitstream": "AVC 비트스트림", + "nalLengthSize": "NAL 길이 크기", + "scalingMatrix": "사용자 지정 스케일링 매트릭스", + "streamIdentifier": "스트림 식별자", + "streamIndex": "스트림 인덱스", + "streamId": "스트림 ID", + "language": "언어", + "languageCode": "언어 코드", + "streamTitle": "트랙 제목", "channels": "채널", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "샘플 레이트", + "spatialAudio": "공간 오디오", + "textBased": "텍스트 기반", + "subtitleFormat": "사이드카 포맷", + "provider": "제공자", + "matchScore": "일치 점수", + "externalDelivery": "별도 제공 가능", + "sidecarPath": "사이드카 경로", + "sourceStream": "복사 출처", + "temporary": "임시", + "timeBase": "시간 기준", "overallBitrate": "전체 비트레이트", "path": "경로", - "fileName": "", + "fileName": "파일 이름", "size": "크기", - "totalSize": "", + "totalSize": "총 크기", "container": "컨테이너", "duration": "재생 시간", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "미리보기 썸네일", + "previewIndex": "미리보기 인덱스", + "packetLength": "패킷 길이", + "filePresent": "파일 있음", + "fileReadable": "서버에서 읽기 가능", + "streamPath": "스트림 경로", "optimizedForStreaming": "스트리밍 최적화", "has64bitOffsets": "64비트 오프셋", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "프로토콜", + "mediaType": "미디어 유형", + "sourceKind": "소스 종류", + "optimizedVersion": "최적화 버전", + "optimizationTarget": "최적화 대상", + "deletedAt": "삭제됨", + "remoteSource": "원격 소스", + "infiniteStream": "무한 스트림", + "directPlay": "Direct Play", + "directStream": "Direct Stream", + "transcoding": "트랜스코딩", + "etag": "ETag", + "versionId": "버전 ID", + "fileId": "파일 ID", + "defaultAudioTrack": "기본 오디오 트랙", + "defaultSubtitleTrack": "기본 자막 트랙", + "subtitlesOff": "꺼짐", + "flagDefault": "기본", + "flagForced": "강제", + "flagSelected": "선택됨", + "flagExternal": "외부", + "flagHearingImpaired": "청각 장애인용", + "flagDub": "더빙", + "flagOriginal": "원본" }, "mediaMenu": { "markAsWatched": "시청 완료로 표시", @@ -524,32 +524,32 @@ "shufflePlay": "무작위 재생", "shuffleNotAvailableOffline": "오프라인에서는 무작위 재생을 사용할 수 없습니다", "fileInfo": "파일 정보", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "서버에서 에피소드 삭제", + "deleteSeasonFromServer": "서버에서 시즌 삭제", + "deleteShowFromServer": "서버에서 프로그램 삭제", + "deleteMovieFromServer": "서버에서 영화 삭제", + "deleteEpisodeTitle": "이 에피소드를 삭제할까요?", + "deleteSeasonTitle": "이 시즌을 삭제할까요?", + "deleteShowTitle": "이 프로그램을 삭제할까요?", + "deleteMovieTitle": "이 영화를 삭제할까요?", + "deleteEpisodeConfirm": "에피소드 삭제", + "deleteSeasonConfirm": "시즌 삭제", + "deleteShowConfirm": "프로그램 삭제", + "deleteMovieConfirm": "영화 삭제", + "deleteAnyway": "그래도 삭제", + "confirmDeleteTarget": "서버에서 ${title}을(를) 영구 삭제할까요?", "deleteMultipleWarning": "모든 에피소드와 파일이 포함됩니다.", "deleteEpisodeCountWarning": { - "other": "" + "other": "포함된 에피소드 ${n}개와 해당 파일이 모두 삭제됩니다." }, "deleteMultiPartWarning": { - "other": "" + "other": "이 항목은 파일 ${n}개에 걸쳐 저장되어 있으며, 모든 파일이 삭제됩니다." }, "deleteSharedFileHeading": { - "other": "" + "other": "같은 파일에 저장된 다른 에피소드 ${n}개도 함께 삭제됩니다:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy가 어떤 파일이 삭제될지 확인하지 못해 위 항목보다 더 많은 파일이 삭제될 수 있습니다. 취소하고 다시 시도하거나 그래도 삭제하세요.", + "deleteScopeUnverifiedNoFileInfo": "서버가 이 항목의 파일 정보를 제공하지 않아 Plezy가 어떤 파일이 삭제될지 확인할 수 없습니다. 위 항목보다 더 많은 파일이 삭제될 수 있습니다.", "mediaDeletedSuccessfully": "미디어 항목이 성공적으로 삭제되었습니다", "mediaFailedToDelete": "미디어 항목 삭제 실패", "rate": "평가", @@ -625,9 +625,9 @@ "playNext": "다음 재생", "playButton": "재생", "pauseButton": "일시정지", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "일시정지됨", + "playbackResumed": "재생 중", + "loadingVideo": "동영상 로딩 중...", "showPlaybackControls": "재생 컨트롤 표시", "hidePlaybackControls": "재생 컨트롤 숨기기", "seekBackwardButton": "${seconds}초 뒤로 이동", @@ -698,7 +698,7 @@ }, "removedFromContinueWatching": "계속 시청 목록에서 제거됨", "errorLoading": "오류: ${error}", - "searchPartialResults": "", + "searchPartialResults": "일부 미디어 서버를 검색하지 못했습니다. 사용 가능한 결과만 표시합니다.", "streamInterrupted": "스트림이 중단되었습니다. 재생을 누르거나 탐색하여 다시 시도하세요.", "liveStreamInterrupted": "라이브 스트림이 중단되었습니다. 재생을 눌러 다시 시도하세요.", "fileInfoNotAvailable": "파일 정보가 없습니다", @@ -737,8 +737,8 @@ "switchingToCompatiblePlayer": "호환되는 플레이어로 전환 중...", "serverLimitTitle": "재생 실패", "serverLimitBody": "서버 오류(HTTP 500). 대역폭/트랜스코딩 제한으로 세션이 거부된 것 같습니다. 소유자에게 조정을 요청하세요.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "파일을 사용할 수 없음", + "mediaUnreadableBody": "서버에서 이 항목을 찾았지만 파일을 읽을 수 없습니다(HTTP 404). 파일이 이동되거나 삭제되었거나 저장소가 오프라인 상태일 수 있습니다. 서버 관리자에게 파일 확인과 라이브러리 재스캔을 요청하세요.", "logsUploaded": "로그 업로드 완료", "logsUploadFailed": "로그 업로드 실패", "logId": "로그 ID" @@ -857,8 +857,8 @@ "sessionExpiredOne": "${name}의 세션이 만료되었습니다", "sessionExpiredMany": "${count}개 서버의 세션이 만료되었습니다", "signInAgain": "다시 로그인", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "${product} 연결 편집", + "editMediaBrowserIntro": "${serverName}의 URL을 추가하거나 제거하세요. Plezy는 연결 가능한 URL 중 지연 시간이 가장 낮은 URL을 사용합니다." }, "discover": { "title": "둘러보기", @@ -888,7 +888,7 @@ }, "errors": { "searchFailed": "검색 실패: ${error}", - "searchUnavailable": "", + "searchUnavailable": "검색이 어떤 미디어 서버에도 연결할 수 없습니다.", "connectionTimeout": "${context} 로드 중 연결 시간 초과", "connectionFailed": "미디어 서버에 연결할 수 없습니다", "unableToLoad": "${context}을(를) 불러올 수 없습니다. 다시 시도하세요.", @@ -1016,36 +1016,36 @@ "uploadLogs": "로그 업로드" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy를 시작하지 못했습니다", + "failedBody": "시작 중 문제가 발생했습니다. 아래 세부 정보에서 실패 원인을 확인할 수 있습니다.", + "failedBodyRepairable": "Plezy의 저장된 설정 파일이 손상되어 Plezy를 시작하려면 먼저 파일을 다시 만들어야 합니다. 재시도해도 해결되지 않습니다 — 저장소 복구를 선택하세요.", + "phaseLabel": "단계", + "showDetails": "세부 정보 표시", + "hideDetails": "세부 정보 숨기기", + "copyDetails": "세부 정보 복사", + "detailsCopied": "세부 정보가 클립보드에 복사되었습니다", + "uploadDetails": "세부 정보 업로드", + "repairStorage": "저장소 복구", + "repairTitle": "저장된 데이터를 복구할까요?", + "repairBodyCommon": "Plezy의 설정 파일이 손상되어 읽을 수 없습니다. 복구하면 모든 설정이 기본값으로 재설정됩니다.", + "repairBodyOneCredential": "저장된 로그인 정보 하나가 손상되어 읽을 수 없습니다. 복구하면 해당 로그인 정보만 제거되며 다른 설정은 그대로 유지됩니다.", + "repairBodySignInsKept": "서버와 프로필은 로그인 상태가 유지됩니다.", + "repairBodySignInsLost": "저장된 로그인 정보를 보호하는 키를 이 파일에서 복구할 수 없어 모든 서버와 프로필에 다시 로그인해야 합니다. 미디어 서버의 데이터에는 영향이 없습니다.", + "repairBodySessionsUncertain": "트래커(MAL, AniList, Simkl, Trakt)와 Seerr는 별도로 저장되며 유지 여부가 확실하지 않습니다. Plezy가 유지된 항목을 정확히 알려줄 것입니다.", + "repairConfirm": "복구", + "repairSucceeded": "저장소가 복구되었습니다", + "repairNeedsRestart": "저장소가 복구되었습니다 — 재시작 필요", + "restartRequiredBody": "데이터가 복구되었지만 Plezy는 이를 사용하려면 새로 시작해야 합니다. Plezy를 종료한 후 다시 열어주세요.", + "quitPlezy": "Plezy 종료", + "repairFailed": "복구 실패", + "repairKeptSignIns": "서버와 프로필이 계속 로그인 상태입니다.", + "repairLostSignIns": "저장된 로그인 정보를 보호하는 키를 복구할 수 없었습니다. 모든 서버와 프로필에 다시 로그인해야 합니다.", + "repairLostSessions": "트래커 또는 Seerr 연결이 하나 이상 끊어져 다시 연결해야 합니다.", + "backupTitle": "손상된 파일의 복사본이 보관되었습니다", + "backupWarning": "로그인 자격 증명이 포함되어 있습니다. 업로드하거나 공유하지 마세요.", + "deleteBackup": "복사본 삭제", + "backupDeleted": "복사본이 삭제되었습니다.", + "previousFailureTitle": "지난번에 Plezy를 시작하지 못했습니다" }, "licenses": { "relatedPackages": "관련 소프트웨어 패키지", @@ -1102,131 +1102,131 @@ "searchPrompt": "${source}에서 영화와 TV 프로그램을 검색하세요.", "searchFailed": "검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} 인기", + "rankAiring": "#${n} 방영 중", + "rankRated": "#${n} 평가", + "rankFavorited": "#${n} 즐겨찾기", + "rankTrending": "#${n} 트렌드", + "rankSeasonal": "#${n} ${season}", + "watchingNow": "${n}명 시청 중", + "available": "이용 가능", + "partiallyAvailable": "부분 이용 가능", + "availableIn4k": "4K 이용 가능", + "requested": "요청됨", + "pendingApproval": "승인 대기 중", + "processing": "처리 중", + "declined": "거절됨", + "requestFailed": "요청 실패", + "requested4k": "4K 요청됨", + "seasonsAvailable": "시즌 ${available}/${total}", + "nextEpisodeIn": "${episode}화 · ${duration} 후", + "nextAiringIn": "${duration} 후 다음 화", + "episodesShort": "${n}화", + "minutesPerEpisode": "${n}분/화", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n}명 등록", + "viewersDay": "오늘 ${n}명 시청", + "viewersWeek": "이번 주 ${n}명 시청", + "viewersMonth": "이번 달 ${n}명 시청", + "viewersYear": "올해 ${n}명 시청", + "viewersAllTime": "시청자 ${n}명", + "planning": "${n}명 볼 예정", + "favorited": "즐겨찾기 ${n}명", + "dropRate": "${percent} 하차", "comments": { - "other": "" + "other": "댓글 ${n}개" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "투표 ${n}개", + "watching": "시청 중 ${n}명", + "completed": "완료 ${n}명", + "onHold": "보류 ${n}명", + "dropped": "하차 ${n}명" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "겨울", + "spring": "봄", + "summer": "여름", + "fall": "가을", + "withYear": "${season} ${year}년" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV 단편", + "movie": "영화", + "special": "스페셜", + "ova": "OVA", + "ona": "ONA", + "music": "음악", + "other": "기타" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "오리지널", + "manga": "만화", + "lightNovel": "라이트 노벨", + "novel": "소설", + "visualNovel": "비주얼 노벨", + "game": "게임", + "webComic": "웹툰", + "musicRelease": "음악", + "otherMedia": "기타" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "감독", + "writer": "각본", + "producer": "프로듀서", + "creator": "제작자", + "composer": "작곡" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "프리퀄", + "sequel": "시퀄", + "sideStory": "사이드 스토리", + "spinOff": "스핀오프", + "alternativeVersion": "대체 버전", + "summary": "요약", + "parentStory": "원작", + "adaptation": "각색", + "other": "관련" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "${day} ${time} 방영", + "broadcastWithZone": "${day} ${time} ${timezone} 방영", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "원제", + "alsoKnownAs": "다른 이름", + "studios": "스튜디오", + "country": "국가", + "language": "언어", + "released": "출시일", + "physicalRelease": "디스크 출시", + "ended": "종영", + "addedOn": "${date}에 추가됨", + "yourRating": "내 평점", + "budget": "제작비", + "revenue": "흥행 수익", + "contentAdvisory": "연령 등급", + "tags": "태그", + "revealSpoilerTags": "스포일러 태그 표시", + "links": "링크", + "watchOn": "시청처", + "watchTrailer": "예고편 보기", + "openOn": "${site}에서 열기", + "crew": "제작진", + "ratings": "평점", + "schedule": "방영 일정", "recommendedByUsers": { - "other": "" + "other": "사용자 ${n}명이 추천" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "${who} 추천", + "favoritedBy": "${who} 즐겨찾기", + "unairedEpisodes": "미방영 ${n}개", + "recommendedByPercent": "시청자의 ${percent} 추천", + "relatedTitles": "관련 작품", + "background": "배경" }, "totalResults": { - "other": "" + "other": "결과 ${n}개" } }, "liveTv": { @@ -1492,15 +1492,15 @@ "editSyncRule": "동기화 규칙 편집", "removeSyncRule": "동기화 규칙 제거", "removeSyncRuleConfirm": "\"${title}\" 동기화를 중단하시겠습니까? 다운로드된 에피소드는 유지됩니다.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "\"${title}\" 동기화를 중지할까요?", + "deleteSyncRuleDownloads": "연결된 다운로드도 삭제", + "deleteSyncRuleDownloadsDescription": "다른 동기화 규칙이나 프로필에서 사용하는 다운로드는 유지됩니다.", "syncRuleCreated": "동기화 규칙 생성됨 — 미시청 에피소드 ${count}개 유지", "syncRuleUpdated": "동기화 규칙 업데이트됨", "syncRuleRemoved": "동기화 규칙 제거됨", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "동기화 규칙과 연결된 다운로드가 삭제되었습니다", + "syncRuleCleanupBusy": "동기화 규칙이 현재 업데이트 중입니다. 잠시 후 다시 시도하세요.", + "syncRuleCleanupUnavailable": "연결된 다운로드를 안전하게 확인할 수 없습니다. 서버에 다시 연결한 후 시도하거나, 다운로드를 삭제하지 않고 규칙만 제거하세요.", "syncedNewEpisodes": "${title}의 새 에피소드 ${count}개 동기화됨", "activeSyncRules": "동기화 규칙", "noSyncRules": "동기화 규칙 없음", @@ -1865,7 +1865,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "${service}에서 Plezy 활성화", @@ -1898,12 +1898,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product} 서버 추가", "serverUrls": "서버 URL", "serverUrlsHelper": "쉼표로 구분하여 여러 URL을 입력할 수 있습니다.", "findServer": "서버 찾기", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "로컬 ${product} 서버를 찾는 중...", + "localMediaBrowserServers": "로컬 ${product} 서버", "username": "사용자 이름", "password": "비밀번호", "signIn": "로그인", @@ -1915,15 +1915,15 @@ "addPlexTitle": "Plex로 로그인", "pinExpired": "로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.", "failedToRegisterAccount": "계정 등록 실패: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "${product} 서버 URL을 입력하세요", "addConnectionTitle": "연결 추가", "addConnectionTitleScoped": "${name}에 추가", "signInWithPlexCard": "Plex로 로그인", "signInWithPlexCardSubtitle": "이 기기를 승인합니다. 공유 서버가 추가됩니다.", "signInWithPlexCardSubtitleScoped": "Plex 계정을 승인합니다. Home 사용자는 프로필이 됩니다.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "${product}에 연결", + "connectToMediaBrowserCardSubtitle": "서버 URL, 사용자 이름, 비밀번호를 입력하세요.", + "connectToMediaBrowserCardSubtitleScoped": "${product} 서버에 로그인하세요. ${name}에 연결됩니다.", "borrowFromAnotherProfile": "다른 프로필에서 빌리기", "borrowFromAnotherProfileSubtitle": "다른 프로필의 연결을 재사용합니다. PIN으로 보호된 프로필에는 PIN이 필요합니다." } diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 2ef01267..8b90c5fe 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Venter på autentisering...\nLogg inn fra nettleseren.", "useBrowser": "Bruk nettleser", "or": "eller", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Koble til ${product}", "useQuickConnect": "Bruk Quick Connect", "quickConnectInstructions": "Åpne Quick Connect i Jellyfin og skriv inn denne koden.", "quickConnectWaiting": "Venter på godkjenning…", @@ -66,17 +66,17 @@ "exitFullscreen": "Avslutt fullskjerm", "pressBackAgainToExit": "Trykk på Tilbake en gang til for å avslutte", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Kritikere", + "audience": "Publikum", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes-kritikere", + "rottenTomatoesAudience": "Rotten Tomatoes-publikum" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Mørkt", "oledTheme": "OLED", "libraryDensity": "Innholdstetthet i biblioteket", - "displayScale": "", + "displayScale": "Skalering", "compact": "Kompakt", "comfortable": "Komfortabel", "tvCornerSpotlightBackdrop": "Fremhevet bakgrunn i hjørnet", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "Automatisk (anbefalt)", "bufferSizeWarning": "${heap} MB minne tilgjengelig. En buffer på ${size} MB kan påvirke avspillingen.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Avspillingsbuffer", + "playbackBufferAuto": "Auto (anbefalt)", + "playbackBufferLarge": "Stor", + "playbackBufferExtraLarge": "Ekstra stor", + "playbackBufferDescription": "Bufrer mer mot ustabile tilkoblinger. Begrenses også av bufferstørrelsen.", "defaultQualityTitle": "Standardkvalitet", "musicQualityTitle": "Musikkvalitet", "subtitleStyling": "Undertekststil", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Aktiver detaljert logging for feilsøking", "viewLogs": "Vis logger", "viewLogsDescription": "Vis applikasjonslogger", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Tøm bildebufferen", + "clearImageCacheDescription": "Tømmer bufret kunstverk og miniatyrbilder. Bilder kan lastes langsommere til de er lastet ned på nytt.", + "clearImageCacheSuccess": "Bildebufferen ble tømt", "resetSettings": "Tilbakestill innstillinger", "resetSettingsDescription": "Gjenopprett standardinnstillinger. Dette kan ikke angres.", "resetSettingsSuccess": "Innstillinger tilbakestilt", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Filinformasjon", - "overview": "", + "overview": "Oversikt", "video": "Video", "audio": "Lyd", "subtitles": "Undertekster", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Innebygde bilder", + "dataStreams": "Datastrømmer", + "lyrics": "Sangtekster", "file": "Fil", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Vedlegg", + "delivery": "Levering", + "versionCounter": "Versjon ${index} av ${count}", + "fileCounter": "Fil ${index} av ${count}", + "noStreams": "Serveren rapporterte ingen strømmer for denne filen.", + "copyPath": "Kopier bane", + "pathCopied": "Filbane kopiert", "codec": "Kodek", - "codecTag": "", + "codecTag": "Codec-tagg", "resolution": "Oppløsning", - "codedResolution": "", + "codedResolution": "Kodet oppløsning", "bitrate": "Bitrate", "frameRate": "Bildefrekvens", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotasjon", + "comment": "Kommentar", + "audioDescription": "Lydbeskrivelse", + "headerCompression": "Overskriftkomprimering", + "sidecarFile": "Sidecar-fil", + "transportTimestamp": "Transporttidsstempel", + "displayOffset": "Visningsforskyvning", + "previewFailureCode": "Forhåndsvisningsfeilkode", + "previewRetries": "Nye forhåndsvisningsforsøk", "aspectRatio": "Sideforhold", - "pixelAspectRatio": "", + "pixelAspectRatio": "Piksel-aspektforhold", "profile": "Profil", - "level": "", + "level": "Nivå", "bitDepth": "Bitdybde", - "pixelFormat": "", + "pixelFormat": "Pikselformat", "colorSpace": "Fargerom", "colorRange": "Fargeområde", "colorPrimaries": "Fargeprimærer", - "colorTransfer": "", + "colorTransfer": "Fargeoverføring", "chromaSubsampling": "Krominansnedsampling", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Kroma-plassering", + "scanType": "Skanningstype", + "interlaced": "Interlaced", + "anamorphic": "Anamorfisk", + "referenceFrames": "Referanserammer", + "dynamicRange": "Dynamisk omfang", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision-nivå", + "dolbyVisionVersion": "Dolby Vision-versjon", + "dolbyVisionLayers": "Dolby Vision-lag", + "baseLayerCompatibility": "Kompatibilitet for basislag", + "avcBitstream": "AVC-bitstrøm", + "nalLengthSize": "NAL-lengdestørrelse", + "scalingMatrix": "Egendefinert skaleringsmatrise", + "streamIdentifier": "Strømidentifikator", + "streamIndex": "Strømindeks", + "streamId": "Strøm-ID", + "language": "Språk", + "languageCode": "Språkkode", + "streamTitle": "Spor-tittel", "channels": "Kanaler", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Samplingsfrekvens", + "spatialAudio": "Romlig lyd", + "textBased": "Tekstbasert", + "subtitleFormat": "Sidecar-format", + "provider": "Tilbyder", + "matchScore": "Match-poengsum", + "externalDelivery": "Kan leveres separat", + "sidecarPath": "Sidecar-bane", + "sourceStream": "Kopiert fra", + "temporary": "Midlertidig", + "timeBase": "Tidsbase", "overallBitrate": "Total bitrate", "path": "Sti", - "fileName": "", + "fileName": "Filnavn", "size": "Størrelse", - "totalSize": "", + "totalSize": "Total størrelse", "container": "Format", "duration": "Varighet", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Forhåndsvisningsminiatyrer", + "previewIndex": "Forhåndsvisningsindeks", + "packetLength": "Pakkelengde", + "filePresent": "Fil til stede", + "fileReadable": "Lesbar for serveren", + "streamPath": "Strømbane", "optimizedForStreaming": "Optimalisert for strømming", "has64bitOffsets": "64-biters forskyvninger", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokoll", + "mediaType": "Mediatype", + "sourceKind": "Kildetype", + "optimizedVersion": "Optimalisert versjon", + "optimizationTarget": "Optimaliseringsmål", + "deletedAt": "Slettet", + "remoteSource": "Ekstern kilde", + "infiniteStream": "Uendelig strøm", + "directPlay": "Direct Play", + "directStream": "Direct Stream", + "transcoding": "Transkoding", + "etag": "ETag", + "versionId": "Versjons-ID", + "fileId": "Fil-ID", + "defaultAudioTrack": "Standard lydspor", + "defaultSubtitleTrack": "Standard tekstspor", + "subtitlesOff": "Av", + "flagDefault": "Standard", + "flagForced": "Tvunget", + "flagSelected": "Valgt", + "flagExternal": "Ekstern", + "flagHearingImpaired": "Hørselshemmet", + "flagDub": "Dub", + "flagOriginal": "Original" }, "mediaMenu": { "markAsWatched": "Merk som sett", @@ -524,35 +524,35 @@ "shufflePlay": "Tilfeldig avspilling", "shuffleNotAvailableOffline": "Tilfeldig avspilling er ikke tilgjengelig uten nett", "fileInfo": "Filinformasjon", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Slett episode fra serveren", + "deleteSeasonFromServer": "Slett sesong fra serveren", + "deleteShowFromServer": "Slett serie fra serveren", + "deleteMovieFromServer": "Slett film fra serveren", + "deleteEpisodeTitle": "Slette denne episoden?", + "deleteSeasonTitle": "Slette denne sesongen?", + "deleteShowTitle": "Slette denne serien?", + "deleteMovieTitle": "Slette denne filmen?", + "deleteEpisodeConfirm": "Slett episode", + "deleteSeasonConfirm": "Slett sesong", + "deleteShowConfirm": "Slett serie", + "deleteMovieConfirm": "Slett film", + "deleteAnyway": "Slett likevel", + "confirmDeleteTarget": "Slette ${title} permanent fra serveren din?", "deleteMultipleWarning": "Dette inkluderer alle episoder og deres filer.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Dette sletter ${n} episode i den, og filen.", + "other": "Dette sletter alle ${n} episodene i den, og filene deres." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Dette elementet er lagret som ${n} fil, som vil bli slettet.", + "other": "Dette elementet er lagret på tvers av ${n} filer, og alle vil bli slettet." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} annen episode er lagret i samme fil og vil også bli slettet:", + "other": "${n} andre episoder er lagret i samme fil og vil også bli slettet:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy kunne ikke sjekke hvilke filer dette vil fjerne, så det kan slette mer enn elementet som er nevnt ovenfor. Avbryt og prøv igjen, eller slett likevel.", + "deleteScopeUnverifiedNoFileInfo": "Serveren din ga ikke fildetaljer for dette elementet, så Plezy kan ikke sjekke hvilke filer dette vil fjerne. Det kan slette mer enn elementet som er nevnt ovenfor.", "mediaDeletedSuccessfully": "Medieelement slettet", "mediaFailedToDelete": "Kunne ikke slette medieelement", "rate": "Vurder", @@ -628,9 +628,9 @@ "playNext": "Spill neste", "playButton": "Spill av", "pauseButton": "Pause", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Pauset", + "playbackResumed": "Spiller", + "loadingVideo": "Laster video", "showPlaybackControls": "Vis avspillingskontroller", "hidePlaybackControls": "Skjul avspillingskontroller", "seekBackwardButton": "Spol tilbake ${seconds} sekunder", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Fjernet fra Fortsett å se", "errorLoading": "Feil: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Noen medieservere kunne ikke søkes i. Viser tilgjengelige resultater.", "streamInterrupted": "Avspillingen ble avbrutt. Trykk på Spill av eller spol for å prøve på nytt.", "liveStreamInterrupted": "Direktesendingen ble avbrutt. Trykk på Spill av for å prøve på nytt.", "fileInfoNotAvailable": "Filinformasjon ikke tilgjengelig", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Bytter til kompatibel spiller...", "serverLimitTitle": "Avspilling mislyktes", "serverLimitBody": "Serverfeil (HTTP 500). En båndbredde-/transkodingsgrense avviste trolig økten. Be eieren justere den.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Fil utilgjengelig", + "mediaUnreadableBody": "Serveren fant dette elementet, men kunne ikke lese filen (HTTP 404). Filen er sannsynligvis flyttet, slettet, eller lagringen er frakoblet. Be serverens eier om å sjekke filen og skanne biblioteket på nytt.", "logsUploaded": "Logger lastet opp", "logsUploadFailed": "Kunne ikke laste opp logger", "logId": "Logg-ID" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Økten er utløpt for ${name}", "sessionExpiredMany": "Økten er utløpt for ${count} servere", "signInAgain": "Logg inn igjen", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Rediger ${product}-tilkobling", + "editMediaBrowserIntro": "Legg til eller fjern URL-er for ${serverName}. Plezy vil bruke den nåbare URL-en med lavest ventetid." }, "discover": { "title": "Oppdag", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Søk mislyktes: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Søket kunne ikke nå noen medieserver.", "connectionTimeout": "Tidsavbrudd ved lasting av ${context}", "connectionFailed": "Kan ikke koble til medieserver", "unableToLoad": "Kunne ikke laste ${context}. Prøv igjen.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Last opp logger" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy kunne ikke starte", + "failedBody": "Noe gikk galt under oppstart. Detaljene nedenfor viser hva som feilet.", + "failedBodyRepairable": "Plezy's lagrede innstillingsfil er skadet og må bygges på nytt før Plezy kan starte. Å prøve igjen hjelper ikke – velg Reparer lagring.", + "phaseLabel": "Trinn", + "showDetails": "Vis detaljer", + "hideDetails": "Skjul detaljer", + "copyDetails": "Kopier detaljer", + "detailsCopied": "Detaljer kopiert til utklippstavlen", + "uploadDetails": "Last opp detaljer", + "repairStorage": "Reparer lagring", + "repairTitle": "Reparere lagrede data?", + "repairBodyCommon": "Plezy's innstillingsfil er skadet og kan ikke leses. Reparasjon tilbakestiller alle innstillinger til standard.", + "repairBodyOneCredential": "Én lagret pålogging er skadet og kan ikke leses. Reparasjon fjerner bare den; de andre innstillingene dine blir urørt.", + "repairBodySignInsKept": "Serverne og profilene dine skal forbli pålogget.", + "repairBodySignInsLost": "Nøkkelen som beskytter de lagrede påloggingene dine kan ikke gjenvinnes fra denne filen, så du må logge på alle servere og profiler på nytt. Ingenting på medieserveren din påvirkes.", + "repairBodySessionsUncertain": "Trackere (MAL, AniList, Simkl, Trakt) og Seerr lagres separat og kan overleve eller ikke. Plezy vil fortelle deg nøyaktig hva det beholdt.", + "repairConfirm": "Reparer", + "repairSucceeded": "Lagring reparert", + "repairNeedsRestart": "Lagring reparert – omstart kreves", + "restartRequiredBody": "Dataene dine ble reparert, men Plezy må starte på nytt før det kan bruke dem. Lukk Plezy og åpne det igjen.", + "quitPlezy": "Avslutt Plezy", + "repairFailed": "Reparasjon mislyktes", + "repairKeptSignIns": "Serverne og profilene dine er fortsatt pålogget.", + "repairLostSignIns": "Nøkkelen som beskytter de lagrede påloggingene dine kunne ikke gjenvinnes. Du må logge på alle servere og profiler på nytt.", + "repairLostSessions": "Minst én tracker- eller Seerr-tilkobling gikk tapt og må kobles til på nytt.", + "backupTitle": "En kopi av den skadede filen ble beholdt", + "backupWarning": "Den inneholder påloggingsinformasjonen din. Ikke last den opp eller del den.", + "deleteBackup": "Slett kopi", + "backupDeleted": "Kopi slettet.", + "previousFailureTitle": "Plezy mislyktes i å starte forrige gang" }, "licenses": { "relatedPackages": "Relaterte pakker", @@ -1107,134 +1107,134 @@ "searchPrompt": "Søk etter filmer og serier på ${source}.", "searchFailed": "Søk mislyktes. Sjekk tilkoblingen og prøv igjen.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} populær", + "rankAiring": "#${n} på lufta", + "rankRated": "#${n} vurdert", + "rankFavorited": "#${n} favorisert", + "rankTrending": "#${n} trendende", + "rankSeasonal": "#${n} i ${season}", + "watchingNow": "${n} ser på", + "available": "Tilgjengelig", + "partiallyAvailable": "Delvis tilgjengelig", + "availableIn4k": "4K tilgjengelig", + "requested": "Forespurt", + "pendingApproval": "Venter på godkjenning", + "processing": "Behandler", + "declined": "Avslått", + "requestFailed": "Forespørsel mislyktes", + "requested4k": "4K forespurt", + "seasonsAvailable": "${available}/${total} sesonger", + "nextEpisodeIn": "Ep ${episode} om ${duration}", + "nextAiringIn": "Neste om ${duration}", + "episodesShort": "${n} ep.", + "minutesPerEpisode": "${n} min/ep", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} oppført", + "viewersDay": "${n} så på i dag", + "viewersWeek": "${n} så på denne uken", + "viewersMonth": "${n} så på denne måneden", + "viewersYear": "${n} så på i år", + "viewersAllTime": "${n} seere", + "planning": "${n} planlegger å se", + "favorited": "${n} favoritter", + "dropRate": "${percent} droppet den", "comments": { - "one": "", - "other": "" + "one": "${n} kommentar", + "other": "${n} kommentarer" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} stemmer", + "watching": "${n} ser på den", + "completed": "${n} fullførte", + "onHold": "${n} på pause", + "dropped": "${n} droppet" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Vinter", + "spring": "Vår", + "summer": "Sommer", + "fall": "Høst", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV-kort", + "movie": "Film", + "special": "Spesial", + "ova": "OVA", + "ona": "ONA", + "music": "Musikk", + "other": "Annet" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Original", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Visual novel", + "game": "Spill", + "webComic": "Nettserie", + "musicRelease": "Musikk", + "otherMedia": "Annet" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Regissør", + "writer": "Forfatter", + "producer": "Produsent", + "creator": "Skaper", + "composer": "Komponist" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Sequel", + "sideStory": "Bihistorie", + "spinOff": "Spin-off", + "alternativeVersion": "Alternativ versjon", + "summary": "Sammendrag", + "parentStory": "Hovedhistorie", + "adaptation": "Adaptasjon", + "other": "Relatert" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Sendes ${day} kl. ${time}", + "broadcastWithZone": "Sendes ${day} kl. ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Originaltittel", + "alsoKnownAs": "Også kjent som", + "studios": "Studioer", + "country": "Land", + "language": "Språk", + "released": "Utgitt", + "physicalRelease": "På disk", + "ended": "Avsluttet", + "addedOn": "Lagt til ${date}", + "yourRating": "Din vurdering", + "budget": "Budsjett", + "revenue": "Billettinntekter", + "contentAdvisory": "Aldersveiledning", + "tags": "Tagger", + "revealSpoilerTags": "Vis spoilertagger", + "links": "Lenker", + "watchOn": "Se på", + "watchTrailer": "Se trailer", + "openOn": "Åpne på ${site}", + "crew": "Mannskap", + "ratings": "Vurderinger", + "schedule": "Sendeskjema", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Anbefalt av ${n} bruker", + "other": "Anbefalt av ${n} brukere" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Anbefalt av ${who}", + "favoritedBy": "Favorisert av ${who}", + "unairedEpisodes": "${n} har ikke blitt sendt ennå", + "recommendedByPercent": "Anbefalt av ${percent} av seerne", + "relatedTitles": "Relaterte titler", + "background": "Bakgrunn" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} resultat", + "other": "${n} resultater" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Rediger synkroniseringsregel", "removeSyncRule": "Fjern synkroniseringsregel", "removeSyncRuleConfirm": "Slutte å synkronisere \"${title}\"? Nedlastede episoder beholdes.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Slutte å synkronisere «${title}»?", + "deleteSyncRuleDownloads": "Slett også tilknyttede nedlastinger", + "deleteSyncRuleDownloadsDescription": "Nedlastinger som brukes av en annen synkroniseringsregel eller profil, beholdes.", "syncRuleCreated": "Synkroniseringsregel opprettet — beholder ${count} usette episoder", "syncRuleUpdated": "Synkroniseringsregel oppdatert", "syncRuleRemoved": "Synkroniseringsregel fjernet", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Synkroniseringsregel og tilknyttede nedlastinger fjernet", + "syncRuleCleanupBusy": "Synkroniseringsreglene oppdateres for øyeblikket. Prøv igjen om et øyeblikk.", + "syncRuleCleanupUnavailable": "Tilknyttede nedlastinger kunne ikke identifiseres på en trygg måte. Koble til serveren på nytt og prøv igjen, eller fjern regelen uten å slette nedlastingene.", "syncedNewEpisodes": "Synkroniserte ${count} nye episoder for ${title}", "activeSyncRules": "Synkroniseringsregler", "noSyncRules": "Ingen synkroniseringsregler", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Aktiver Plezy på ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Legg til ${product}-server", "serverUrls": "Server-URL-er", "serverUrlsHelper": "Flere URL-er er tillatt, atskilt med komma.", "findServer": "Finn server", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Leter etter lokale ${product}-servere...", + "localMediaBrowserServers": "Lokale ${product}-servere", "username": "Brukernavn", "password": "Passord", "signIn": "Logg inn", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Logg inn med Plex", "pinExpired": "PIN-koden utløp før innloggingen var fullført. Prøv igjen.", "failedToRegisterAccount": "Kunne ikke registrere kontoen: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Skriv inn URL-en til ${product}-serveren din", "addConnectionTitle": "Legg til tilkobling", "addConnectionTitleScoped": "Legg til for ${name}", "signInWithPlexCard": "Logg inn med Plex", "signInWithPlexCardSubtitle": "Autoriser denne enheten. Delte servere legges til.", "signInWithPlexCardSubtitleScoped": "Autoriser en Plex-konto. Home-brukere blir profiler.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Koble til ${product}", + "connectToMediaBrowserCardSubtitle": "Skriv inn server-URL-en, brukernavnet og passordet ditt.", + "connectToMediaBrowserCardSubtitleScoped": "Logg på ${product}-serveren din. Knyttes til ${name}.", "borrowFromAnotherProfile": "Lån fra en annen profil", "borrowFromAnotherProfileSubtitle": "Gjenbruk en annen profils tilkobling. PIN-beskyttede profiler krever PIN." } diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index ec740177..c3dbb599 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Wachten op authenticatie...\nMeld je aan via je browser.", "useBrowser": "Gebruik browser", "or": "of", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Verbinding maken met ${product}", "useQuickConnect": "Quick Connect gebruiken", "quickConnectInstructions": "Open Quick Connect in Jellyfin en voer deze code in.", "quickConnectWaiting": "Wachten op goedkeuring…", @@ -66,17 +66,17 @@ "exitFullscreen": "Volledig scherm verlaten", "pressBackAgainToExit": "Druk nogmaals op terug om af te sluiten", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Critici", + "audience": "Publiek", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes-critici", + "rottenTomatoesAudience": "Rotten Tomatoes-publiek" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Donker", "oledTheme": "OLED", "libraryDensity": "Bibliotheekdichtheid", - "displayScale": "", + "displayScale": "Weergaveschaal", "compact": "Compact", "comfortable": "Comfortabel", "tvCornerSpotlightBackdrop": "Uitgelichte achtergrond in de hoek", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "Automatisch (aanbevolen)", "bufferSizeWarning": "${heap}MB geheugen beschikbaar. Een buffer van ${size}MB kan afspelen beïnvloeden.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Afspeelbuffer", + "playbackBufferAuto": "Auto (aanbevolen)", + "playbackBufferLarge": "Groot", + "playbackBufferExtraLarge": "Extra groot", + "playbackBufferDescription": "Buffert meer tegen onstabiele verbindingen. Ook beperkt door de buffergrootte.", "defaultQualityTitle": "Standaardkwaliteit", "musicQualityTitle": "Muziekkwaliteit", "subtitleStyling": "Ondertitelopmaak", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Schakel gedetailleerde logboekregistratie in om problemen op te lossen", "viewLogs": "Logbestanden bekijken", "viewLogsDescription": "Logbestanden van de app bekijken", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Afbeeldingscache wissen", + "clearImageCacheDescription": "Gecachte artwork en miniaturen wissen. Afbeeldingen kunnen langzamer laden tot ze opnieuw zijn gedownload.", + "clearImageCacheSuccess": "Afbeeldingscache succesvol gewist", "resetSettings": "Instellingen resetten", "resetSettingsDescription": "Standaardinstellingen herstellen. Dit kan niet ongedaan worden gemaakt.", "resetSettingsSuccess": "Instellingen succesvol gereset", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Bestandsinformatie", - "overview": "", + "overview": "Overzicht", "video": "Video", "audio": "Audio", "subtitles": "Ondertitels", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Ingebedde afbeeldingen", + "dataStreams": "Datastreams", + "lyrics": "Songteksten", "file": "Bestand", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Bijlagen", + "delivery": "Levering", + "versionCounter": "Versie ${index} van ${count}", + "fileCounter": "Bestand ${index} van ${count}", + "noStreams": "De server rapporteerde geen streams voor dit bestand.", + "copyPath": "Pad kopiëren", + "pathCopied": "Bestandspad gekopieerd", "codec": "Codec", - "codecTag": "", + "codecTag": "Codec-tag", "resolution": "Resolutie", - "codedResolution": "", + "codedResolution": "Gecodeerde resolutie", "bitrate": "Bitrate", "frameRate": "Framesnelheid", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotatie", + "comment": "Opmerking", + "audioDescription": "Audiodescriptie", + "headerCompression": "Headercompressie", + "sidecarFile": "Sidecar-bestand", + "transportTimestamp": "Transporttijdstempel", + "displayOffset": "Display-offset", + "previewFailureCode": "Foutcode preview", + "previewRetries": "Previewpogingen", "aspectRatio": "Beeldverhouding", - "pixelAspectRatio": "", + "pixelAspectRatio": "Pixel-aspectratio", "profile": "Profiel", - "level": "", + "level": "Niveau", "bitDepth": "Bitdiepte", - "pixelFormat": "", + "pixelFormat": "Pixelformaat", "colorSpace": "Kleurruimte", "colorRange": "Kleurbereik", "colorPrimaries": "Kleurprimaires", - "colorTransfer": "", + "colorTransfer": "Kleurtransfer", "chromaSubsampling": "Chroma-subsampling", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Chroma-positie", + "scanType": "Scantype", + "interlaced": "Interlaced", + "anamorphic": "Anamorf", + "referenceFrames": "Referentieframes", + "dynamicRange": "Dynamisch bereik", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision-niveau", + "dolbyVisionVersion": "Dolby Vision-versie", + "dolbyVisionLayers": "Dolby Vision-lagen", + "baseLayerCompatibility": "Compatibiliteit basislaag", + "avcBitstream": "AVC-bitstroom", + "nalLengthSize": "NAL-lengte", + "scalingMatrix": "Aangepaste schalingsmatrix", + "streamIdentifier": "Stream-id", + "streamIndex": "Streamindex", + "streamId": "Stream-ID", + "language": "Taal", + "languageCode": "Taalcode", + "streamTitle": "Tracktitel", "channels": "Kanalen", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Samplingsnelheid", + "spatialAudio": "Ruimtelijke audio", + "textBased": "Op tekst gebaseerd", + "subtitleFormat": "Sidecar-formaat", + "provider": "Provider", + "matchScore": "Matchscore", + "externalDelivery": "Kan afzonderlijk worden geleverd", + "sidecarPath": "Sidecar-pad", + "sourceStream": "Gekopieerd van", + "temporary": "Tijdelijk", + "timeBase": "Tijdbasis", "overallBitrate": "Totale bitrate", "path": "Pad", - "fileName": "", + "fileName": "Bestandsnaam", "size": "Grootte", - "totalSize": "", + "totalSize": "Totale grootte", "container": "Container", "duration": "Duur", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Preview-miniaturen", + "previewIndex": "Preview-index", + "packetLength": "Pakketlengte", + "filePresent": "Bestand aanwezig", + "fileReadable": "Leesbaar door server", + "streamPath": "Streampad", "optimizedForStreaming": "Geoptimaliseerd voor streaming", "has64bitOffsets": "64-bits offsets", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protocol", + "mediaType": "Mediatype", + "sourceKind": "Soort bron", + "optimizedVersion": "Geoptimaliseerde versie", + "optimizationTarget": "Optimalisatiedoel", + "deletedAt": "Verwijderd", + "remoteSource": "Externe bron", + "infiniteStream": "Oneindige stream", + "directPlay": "Direct Play", + "directStream": "Direct Stream", + "transcoding": "Transcoderen", + "etag": "ETag", + "versionId": "Versie-ID", + "fileId": "Bestands-ID", + "defaultAudioTrack": "Standaard audiotrack", + "defaultSubtitleTrack": "Standaard ondertitelingstrack", + "subtitlesOff": "Uit", + "flagDefault": "Standaard", + "flagForced": "Geforceerd", + "flagSelected": "Geselecteerd", + "flagExternal": "Extern", + "flagHearingImpaired": "Slechthorend", + "flagDub": "Nasynchronisatie", + "flagOriginal": "Origineel" }, "mediaMenu": { "markAsWatched": "Als bekeken markeren", @@ -524,35 +524,35 @@ "shufflePlay": "Willekeurig afspelen", "shuffleNotAvailableOffline": "Willekeurig afspelen is offline niet beschikbaar", "fileInfo": "Bestandsinformatie", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Aflevering verwijderen van server", + "deleteSeasonFromServer": "Seizoen verwijderen van server", + "deleteShowFromServer": "Serie verwijderen van server", + "deleteMovieFromServer": "Film verwijderen van server", + "deleteEpisodeTitle": "Deze aflevering verwijderen?", + "deleteSeasonTitle": "Dit seizoen verwijderen?", + "deleteShowTitle": "Deze serie verwijderen?", + "deleteMovieTitle": "Deze film verwijderen?", + "deleteEpisodeConfirm": "Aflevering verwijderen", + "deleteSeasonConfirm": "Seizoen verwijderen", + "deleteShowConfirm": "Serie verwijderen", + "deleteMovieConfirm": "Film verwijderen", + "deleteAnyway": "Toch verwijderen", + "confirmDeleteTarget": "${title} definitief van je server verwijderen?", "deleteMultipleWarning": "Dit omvat alle afleveringen en hun bestanden.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Hiermee wordt de ${n} aflevering erin verwijderd, inclusief het bestand.", + "other": "Hiermee worden alle ${n} afleveringen erin verwijderd, inclusief hun bestanden." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Dit item wordt opgeslagen als ${n} bestand, dat wordt verwijderd.", + "other": "Dit item wordt opgeslagen over ${n} bestanden, en ze worden allemaal verwijderd." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} andere aflevering staat in hetzelfde bestand en wordt ook verwijderd:", + "other": "${n} andere afleveringen staan in hetzelfde bestand en worden ook verwijderd:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy kon niet controleren welke bestanden hiermee worden verwijderd, dus het kan meer verwijderen dan het hierboven genoemde item. Annuleer en probeer het opnieuw, of verwijder toch.", + "deleteScopeUnverifiedNoFileInfo": "Je server heeft geen bestandsgegevens voor dit item verstrekt, dus Plezy kan niet controleren welke bestanden hiermee worden verwijderd. Het kan meer verwijderen dan het hierboven genoemde item.", "mediaDeletedSuccessfully": "Media-item succesvol verwijderd", "mediaFailedToDelete": "Verwijderen van media-item mislukt", "rate": "Beoordelen", @@ -628,9 +628,9 @@ "playNext": "Volgende afspelen", "playButton": "Afspelen", "pauseButton": "Pauzeren", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Gepauzeerd", + "playbackResumed": "Afspelen", + "loadingVideo": "Video laden", "showPlaybackControls": "Afspeelbediening tonen", "hidePlaybackControls": "Afspeelbediening verbergen", "seekBackwardButton": "${seconds} seconden terugspoelen", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Verwijderd uit 'Doorgaan met kijken'", "errorLoading": "Fout: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Sommige mediaservers konden niet worden doorzocht. Beschikbare resultaten worden getoond.", "streamInterrupted": "De stream is onderbroken. Druk op afspelen of spoel om het opnieuw te proberen.", "liveStreamInterrupted": "De livestream is onderbroken. Druk op afspelen om het opnieuw te proberen.", "fileInfoNotAvailable": "Bestandsinformatie niet beschikbaar", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Overschakelen naar compatibele speler...", "serverLimitTitle": "Afspelen mislukt", "serverLimitBody": "Serverfout (HTTP 500). Waarschijnlijk weigerde een bandbreedte-/transcodeerlimiet deze sessie. Vraag de eigenaar dit aan te passen.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Bestand niet beschikbaar", + "mediaUnreadableBody": "De server heeft dit item gevonden maar kon het bestand niet lezen (HTTP 404). Het bestand is waarschijnlijk verplaatst of verwijderd, of de opslag is offline. Vraag de serverbeheerder om het bestand te controleren en de bibliotheek opnieuw te scannen.", "logsUploaded": "Logbestanden geüpload", "logsUploadFailed": "Uploaden van logbestanden mislukt", "logId": "Logboek-ID" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Sessie verlopen voor ${name}", "sessionExpiredMany": "Sessie verlopen voor ${count} servers", "signInAgain": "Opnieuw aanmelden", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "${product}-verbinding bewerken", + "editMediaBrowserIntro": "Voeg URL's toe aan ${serverName} of verwijder ze. Plezy gebruikt de bereikbare URL met de laagste latentie." }, "discover": { "title": "Ontdekken", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Zoeken mislukt: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Zoeken kon geen enkele mediaserver bereiken.", "connectionTimeout": "Time-out van verbinding tijdens het laden van ${context}", "connectionFailed": "Kan geen verbinding maken met mediaserver", "unableToLoad": "Kan ${context} niet laden. Probeer het opnieuw.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Logbestanden uploaden" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy kon niet starten", + "failedBody": "Er is iets misgegaan tijdens het opstarten. De onderstaande details laten zien wat er misging.", + "failedBodyRepairable": "Het opgeslagen instellingenbestand van Plezy is beschadigd en moet opnieuw worden opgebouwd voordat Plezy kan starten. Opnieuw proberen helpt niet — kies 'Opslag repareren'.", + "phaseLabel": "Stap", + "showDetails": "Details tonen", + "hideDetails": "Details verbergen", + "copyDetails": "Details kopiëren", + "detailsCopied": "Details naar het klembord gekopieerd", + "uploadDetails": "Details uploaden", + "repairStorage": "Opslag repareren", + "repairTitle": "Opgeslagen gegevens repareren?", + "repairBodyCommon": "Het instellingenbestand van Plezy is beschadigd en kan niet worden gelezen. Door te repareren worden alle instellingen teruggezet naar hun standaardwaarde.", + "repairBodyOneCredential": "Eén opgeslagen aanmelding is beschadigd en kan niet worden gelezen. Door te repareren wordt alleen die ene verwijderd; je andere instellingen blijven onaangetast.", + "repairBodySignInsKept": "Je servers en profielen blijven naar verwachting aangemeld.", + "repairBodySignInsLost": "De sleutel die je opgeslagen aanmeldingen beschermt, kan niet uit dit bestand worden hersteld. Je moet je daarom opnieuw aanmelden bij elke server en elk profiel. Er wordt niets op je mediaserver gewijzigd.", + "repairBodySessionsUncertain": "Trackers (MAL, AniList, Simkl, Trakt) en Seerr worden apart opgeslagen en blijven mogelijk wel of niet bewaard. Plezy vertelt je precies wat het heeft bewaard.", + "repairConfirm": "Repareren", + "repairSucceeded": "Opslag gerepareerd", + "repairNeedsRestart": "Opslag gerepareerd — herstart vereist", + "restartRequiredBody": "Je gegevens zijn gerepareerd, maar Plezy moet opnieuw starten voordat het ze kan gebruiken. Sluit Plezy en open het opnieuw.", + "quitPlezy": "Plezy afsluiten", + "repairFailed": "Repareren mislukt", + "repairKeptSignIns": "Je servers en profielen zijn nog steeds aangemeld.", + "repairLostSignIns": "De sleutel die je opgeslagen aanmeldingen beschermt, kon niet worden hersteld. Je moet je opnieuw aanmelden bij elke server en elk profiel.", + "repairLostSessions": "Er is minstens één tracker- of Seerr-verbinding verloren gegaan en die moet opnieuw worden verbonden.", + "backupTitle": "Er is een kopie van het beschadigde bestand bewaard", + "backupWarning": "Het bevat je aanmeldgegevens. Upload of deel het niet.", + "deleteBackup": "Kopie verwijderen", + "backupDeleted": "Kopie verwijderd.", + "previousFailureTitle": "Plezy kon de vorige keer niet starten" }, "licenses": { "relatedPackages": "Gerelateerde pakketten", @@ -1107,134 +1107,134 @@ "searchPrompt": "Zoek naar films en series op ${source}.", "searchFailed": "Zoeken mislukt. Controleer je verbinding en probeer opnieuw.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} populair", + "rankAiring": "#${n} nu op tv", + "rankRated": "#${n} beoordeeld", + "rankFavorited": "#${n} favoriet", + "rankTrending": "#${n} trending", + "rankSeasonal": "#${n} in ${season}", + "watchingNow": "${n} kijken", + "available": "Beschikbaar", + "partiallyAvailable": "Gedeeltelijk beschikbaar", + "availableIn4k": "4K beschikbaar", + "requested": "Aangevraagd", + "pendingApproval": "In afwachting van goedkeuring", + "processing": "Wordt verwerkt", + "declined": "Afgewezen", + "requestFailed": "Aanvraag mislukt", + "requested4k": "4K aangevraagd", + "seasonsAvailable": "${available}/${total} seizoenen", + "nextEpisodeIn": "Afl. ${episode} over ${duration}", + "nextAiringIn": "Volgende over ${duration}", + "episodesShort": "${n} afl.", + "minutesPerEpisode": "${n} min/afl.", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} op de lijst", + "viewersDay": "${n} vandaag bekeken", + "viewersWeek": "${n} deze week bekeken", + "viewersMonth": "${n} deze maand bekeken", + "viewersYear": "${n} dit jaar bekeken", + "viewersAllTime": "${n} kijkers", + "planning": "${n} van plan om te kijken", + "favorited": "${n} favorieten", + "dropRate": "${percent} is ermee gestopt", "comments": { - "one": "", - "other": "" + "one": "${n} reactie", + "other": "${n} reacties" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} stemmen", + "watching": "${n} kijken ernaar", + "completed": "${n} afgerond", + "onHold": "${n} op pauze", + "dropped": "${n} gestopt" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Winter", + "spring": "Lente", + "summer": "Zomer", + "fall": "Herfst", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "Korte tv-serie", + "movie": "Film", + "special": "Special", + "ova": "OVA", + "ona": "ONA", + "music": "Muziek", + "other": "Anders" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Origineel", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Visual novel", + "game": "Game", + "webComic": "Webcomic", + "musicRelease": "Muziek", + "otherMedia": "Anders" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Regisseur", + "writer": "Schrijver", + "producer": "Producent", + "creator": "Maker", + "composer": "Componist" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Sequel", + "sideStory": "Side story", + "spinOff": "Spin-off", + "alternativeVersion": "Alternatieve versie", + "summary": "Samenvatting", + "parentStory": "Hoofdverhaal", + "adaptation": "Adaptatie", + "other": "Gerelateerd" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Wordt uitgezonden op ${day} om ${time}", + "broadcastWithZone": "Wordt uitgezonden op ${day} om ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Originele titel", + "alsoKnownAs": "Ook bekend als", + "studios": "Studio's", + "country": "Land", + "language": "Taal", + "released": "Uitgebracht", + "physicalRelease": "Op schijf", + "ended": "Beëindigd", + "addedOn": "Toegevoegd op ${date}", + "yourRating": "Jouw beoordeling", + "budget": "Budget", + "revenue": "Box office", + "contentAdvisory": "Leeftijdsadvies", + "tags": "Tags", + "revealSpoilerTags": "Spoilertags tonen", + "links": "Links", + "watchOn": "Bekijk op", + "watchTrailer": "Trailer bekijken", + "openOn": "Openen op ${site}", + "crew": "Crew", + "ratings": "Beoordelingen", + "schedule": "Uitzendschema", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Aanbevolen door ${n} gebruiker", + "other": "Aanbevolen door ${n} gebruikers" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Aanbevolen door ${who}", + "favoritedBy": "Favoriet bij ${who}", + "unairedEpisodes": "${n} nog niet uitgezonden", + "recommendedByPercent": "Aanbevolen door ${percent} van de kijkers", + "relatedTitles": "Gerelateerde titels", + "background": "Achtergrond" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} resultaat", + "other": "${n} resultaten" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Synchronisatieregel bewerken", "removeSyncRule": "Synchronisatieregel verwijderen", "removeSyncRuleConfirm": "Synchronisatie van \"${title}\" stoppen? Gedownloade afleveringen worden behouden.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Stoppen met synchroniseren van \"${title}\"?", + "deleteSyncRuleDownloads": "Gekoppelde downloads ook verwijderen", + "deleteSyncRuleDownloadsDescription": "Downloads die door een andere synchronisatieregel of een ander profiel worden gebruikt, blijven behouden.", "syncRuleCreated": "Synchronisatieregel aangemaakt — ${count} onbekeken afleveringen behouden", "syncRuleUpdated": "Synchronisatieregel bijgewerkt", "syncRuleRemoved": "Synchronisatieregel verwijderd", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Synchronisatieregel en gekoppelde downloads verwijderd", + "syncRuleCleanupBusy": "Synchronisatieregels worden momenteel bijgewerkt. Probeer het over een moment opnieuw.", + "syncRuleCleanupUnavailable": "Gekoppelde downloads konden niet veilig worden geïdentificeerd. Maak opnieuw verbinding met de server en probeer het opnieuw, of verwijder de regel zonder de downloads te verwijderen.", "syncedNewEpisodes": "${count} nieuwe afleveringen gesynchroniseerd voor ${title}", "activeSyncRules": "Synchronisatieregels", "noSyncRules": "Geen synchronisatieregels", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Plezy activeren op ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product}-server toevoegen", "serverUrls": "Server-URL's", "serverUrlsHelper": "Meerdere URL's toegestaan, gescheiden door komma's.", "findServer": "Server zoeken", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Zoeken naar lokale ${product}-servers...", + "localMediaBrowserServers": "Lokale ${product}-servers", "username": "Gebruikersnaam", "password": "Wachtwoord", "signIn": "Inloggen", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Inloggen met Plex", "pinExpired": "De pincode verliep voordat je kon inloggen. Probeer het opnieuw.", "failedToRegisterAccount": "Account registreren mislukt: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Voer de URL van je ${product}-server in", "addConnectionTitle": "Verbinding toevoegen", "addConnectionTitleScoped": "Toevoegen aan ${name}", "signInWithPlexCard": "Inloggen met Plex", "signInWithPlexCardSubtitle": "Autoriseer dit apparaat. Gedeelde servers worden toegevoegd.", "signInWithPlexCardSubtitleScoped": "Autoriseer een Plex-account. Home-gebruikers worden profielen.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Verbinding maken met ${product}", + "connectToMediaBrowserCardSubtitle": "Voer je server-URL, gebruikersnaam en wachtwoord in.", + "connectToMediaBrowserCardSubtitleScoped": "Meld je aan bij je ${product}-server. Wordt gekoppeld aan ${name}.", "borrowFromAnotherProfile": "Van een ander profiel lenen", "borrowFromAnotherProfileSubtitle": "Hergebruik de verbinding van een ander profiel. Voor profielen met pincodebeveiliging is een pincode vereist." } diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index 3c57638b..376cde0d 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Oczekiwanie na uwierzytelnienie...\nZaloguj się w przeglądarce.", "useBrowser": "Użyj przeglądarki", "or": "lub", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Połącz z ${product}", "useQuickConnect": "Użyj Quick Connect", "quickConnectInstructions": "Otwórz Quick Connect w Jellyfin i wpisz ten kod.", "quickConnectWaiting": "Oczekiwanie na zatwierdzenie…", @@ -46,7 +46,7 @@ "resume": "Wznów", "error": "Błąd", "search": "Szukaj", - "home": "Strona główna", + "home": "Start", "back": "Wstecz", "settings": "Ustawienia", "mute": "Wycisz", @@ -66,17 +66,17 @@ "exitFullscreen": "Wyjdź z pełnego ekranu", "pressBackAgainToExit": "Naciśnij ponownie przycisk Wstecz, aby wyjść", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Krytycy", + "audience": "Widzowie", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Krytycy Rotten Tomatoes", + "rottenTomatoesAudience": "Widzowie Rotten Tomatoes" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Ciemny", "oledTheme": "OLED", "libraryDensity": "Gęstość biblioteki", - "displayScale": "", + "displayScale": "Skalowanie", "compact": "Kompaktowy", "comfortable": "Wygodny", "tvCornerSpotlightBackdrop": "Tło wyróżnionej pozycji w rogu", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "Automatyczny (zalecany)", "bufferSizeWarning": "Dostępna pamięć: ${heap}MB. Bufor ${size}MB może wpłynąć na odtwarzanie.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Bufor odtwarzania", + "playbackBufferAuto": "Auto (zalecane)", + "playbackBufferLarge": "Duży", + "playbackBufferExtraLarge": "Bardzo duży", + "playbackBufferDescription": "Buforuje więcej w przypadku niestabilnych połączeń. Ograniczony również przez rozmiar bufora.", "defaultQualityTitle": "Domyślna jakość", "musicQualityTitle": "Jakość muzyki", "subtitleStyling": "Styl napisów", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Włącz szczegółowe rejestrowanie, aby ułatwić rozwiązywanie problemów", "viewLogs": "Pokaż logi", "viewLogsDescription": "Pokaż logi aplikacji", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Wyczyść pamięć podręczną obrazów", + "clearImageCacheDescription": "Wyczyść zapisane okładki i miniatury. Obrazy mogą ładować się wolniej, dopóki nie zostaną pobrane ponownie.", + "clearImageCacheSuccess": "Pamięć podręczna obrazów została wyczyszczona", "resetSettings": "Zresetuj ustawienia", "resetSettingsDescription": "Przywróć ustawienia domyślne. Tego nie można cofnąć.", "resetSettingsSuccess": "Przywrócono ustawienia domyślne", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Informacje o pliku", - "overview": "", + "overview": "Przegląd", "video": "Wideo", "audio": "Audio", "subtitles": "Napisy", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Obrazy osadzone", + "dataStreams": "Strumienie danych", + "lyrics": "Teksty", "file": "Plik", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Załączniki", + "delivery": "Dostarczanie", + "versionCounter": "Wersja ${index} z ${count}", + "fileCounter": "Plik ${index} z ${count}", + "noStreams": "Serwer nie zgłosił żadnych strumieni dla tego pliku.", + "copyPath": "Kopiuj ścieżkę", + "pathCopied": "Skopiowano ścieżkę pliku", "codec": "Kodek", - "codecTag": "", + "codecTag": "Tag kodeka", "resolution": "Rozdzielczość", - "codedResolution": "", + "codedResolution": "Rozdzielczość kodowania", "bitrate": "Przepływność", "frameRate": "Klatki na sekundę", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotacja", + "comment": "Komentarz", + "audioDescription": "Audiodeskrypcja", + "headerCompression": "Kompresja nagłówka", + "sidecarFile": "Plik towarzyszący", + "transportTimestamp": "Znacznik czasu transportu", + "displayOffset": "Przesunięcie wyświetlania", + "previewFailureCode": "Kod błędu podglądu", + "previewRetries": "Ponowne próby podglądu", "aspectRatio": "Proporcje", - "pixelAspectRatio": "", + "pixelAspectRatio": "Współczynnik proporcji pikseli", "profile": "Profil", - "level": "", + "level": "Poziom", "bitDepth": "Głębia bitowa", - "pixelFormat": "", + "pixelFormat": "Format pikseli", "colorSpace": "Przestrzeń kolorów", "colorRange": "Zakres kolorów", "colorPrimaries": "Kolory podstawowe", - "colorTransfer": "", + "colorTransfer": "Przenoszenie kolorów", "chromaSubsampling": "Podpróbkowanie chrominancji", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Położenie chrominancji", + "scanType": "Typ skanowania", + "interlaced": "Z przeplotem", + "anamorphic": "Anamorficzny", + "referenceFrames": "Klatki referencyjne", + "dynamicRange": "Zakres dynamiczny", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Poziom Dolby Vision", + "dolbyVisionVersion": "Wersja Dolby Vision", + "dolbyVisionLayers": "Warstwy Dolby Vision", + "baseLayerCompatibility": "Zgodność warstwy bazowej", + "avcBitstream": "Strumień bitowy AVC", + "nalLengthSize": "Rozmiar długości NAL", + "scalingMatrix": "Własna macierz skalowania", + "streamIdentifier": "Identyfikator strumienia", + "streamIndex": "Indeks strumienia", + "streamId": "ID strumienia", + "language": "Język", + "languageCode": "Kod języka", + "streamTitle": "Tytuł ścieżki", "channels": "Kanały", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Częstotliwość próbkowania", + "spatialAudio": "Dźwięk przestrzenny", + "textBased": "Tekstowy", + "subtitleFormat": "Format pliku towarzyszącego", + "provider": "Dostawca", + "matchScore": "Wynik dopasowania", + "externalDelivery": "Może być dostarczany osobno", + "sidecarPath": "Ścieżka pliku towarzyszącego", + "sourceStream": "Skopiowano z", + "temporary": "Tymczasowy", + "timeBase": "Baza czasu", "overallBitrate": "Całkowita przepływność", "path": "Ścieżka", - "fileName": "", + "fileName": "Nazwa pliku", "size": "Rozmiar", - "totalSize": "", + "totalSize": "Całkowity rozmiar", "container": "Kontener", "duration": "Czas trwania", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Miniatury podglądu", + "previewIndex": "Indeks podglądu", + "packetLength": "Długość pakietu", + "filePresent": "Plik obecny", + "fileReadable": "Czytelny dla serwera", + "streamPath": "Ścieżka strumienia", "optimizedForStreaming": "Zoptymalizowane do strumieniowania", "has64bitOffsets": "Przesunięcia 64-bitowe", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokół", + "mediaType": "Typ multimediów", + "sourceKind": "Rodzaj źródła", + "optimizedVersion": "Zoptymalizowana wersja", + "optimizationTarget": "Cel optymalizacji", + "deletedAt": "Usunięto", + "remoteSource": "Źródło zdalne", + "infiniteStream": "Nieskończony strumień", + "directPlay": "Odtwarzanie bezpośrednie", + "directStream": "Bezpośrednie strumieniowanie", + "transcoding": "Transkodowanie", + "etag": "ETag", + "versionId": "ID wersji", + "fileId": "ID pliku", + "defaultAudioTrack": "Domyślna ścieżka audio", + "defaultSubtitleTrack": "Domyślna ścieżka napisów", + "subtitlesOff": "Wył.", + "flagDefault": "Domyślna", + "flagForced": "Wymuszone", + "flagSelected": "Wybrana", + "flagExternal": "Zewnętrzne", + "flagHearingImpaired": "Dla niesłyszących", + "flagDub": "Dubbing", + "flagOriginal": "Oryginalna" }, "mediaMenu": { "markAsWatched": "Oznacz jako obejrzane", @@ -524,41 +524,41 @@ "shufflePlay": "Odtwarzanie losowe", "shuffleNotAvailableOffline": "Odtwarzanie losowe nie jest dostępne offline", "fileInfo": "Informacje o pliku", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Usuń odcinek z serwera", + "deleteSeasonFromServer": "Usuń sezon z serwera", + "deleteShowFromServer": "Usuń serial z serwera", + "deleteMovieFromServer": "Usuń film z serwera", + "deleteEpisodeTitle": "Usunąć ten odcinek?", + "deleteSeasonTitle": "Usunąć ten sezon?", + "deleteShowTitle": "Usunąć ten serial?", + "deleteMovieTitle": "Usunąć ten film?", + "deleteEpisodeConfirm": "Usuń odcinek", + "deleteSeasonConfirm": "Usuń sezon", + "deleteShowConfirm": "Usuń serial", + "deleteMovieConfirm": "Usuń film", + "deleteAnyway": "Usuń mimo to", + "confirmDeleteTarget": "Trwale usunąć ${title} z Twojego serwera?", "deleteMultipleWarning": "Obejmuje to wszystkie odcinki i ich pliki.", "deleteEpisodeCountWarning": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "Usunięty zostanie ${n} odcinek w nim oraz jego plik.", + "few": "Usunięte zostaną ${n} odcinki w nim oraz ich pliki.", + "many": "Usuniętych zostanie ${n} odcinków w nim oraz ich pliki.", + "other": "Usuniętych zostanie ${n} odcinka w nim oraz ich pliki." }, "deleteMultiPartWarning": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "Ten element jest przechowywany jako ${n} plik, który zostanie usunięty.", + "few": "Ten element jest przechowywany w ${n} plikach, które wszystkie zostaną usunięte.", + "many": "Ten element jest przechowywany w ${n} plikach, które wszystkie zostaną usunięte.", + "other": "Ten element jest przechowywany w ${n} pliku, który zostanie usunięty." }, "deleteSharedFileHeading": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "W tym samym pliku przechowywany jest jeszcze ${n} inny odcinek, który również zostanie usunięty:", + "few": "W tym samym pliku przechowywane są jeszcze ${n} inne odcinki, które również zostaną usunięte:", + "many": "W tym samym pliku przechowywanych jest jeszcze ${n} innych odcinków, które również zostaną usunięte:", + "other": "W tym samym pliku przechowywany jest jeszcze ${n} innego odcinka, który również zostanie usunięty:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy nie mogło sprawdzić, które pliki zostaną usunięte, więc może usunąć więcej niż element wymieniony powyżej. Anuluj i spróbuj ponownie albo usuń mimo to.", + "deleteScopeUnverifiedNoFileInfo": "Twój serwer nie podał informacji o plikach tego elementu, więc Plezy nie może sprawdzić, które pliki zostaną usunięte. Może usunąć więcej niż element wymieniony powyżej.", "mediaDeletedSuccessfully": "Usunięto element multimedialny", "mediaFailedToDelete": "Nie udało się usunąć elementu multimedialnego", "rate": "Oceń", @@ -634,9 +634,9 @@ "playNext": "Odtwórz następny", "playButton": "Odtwórz", "pauseButton": "Pauza", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Wstrzymano", + "playbackResumed": "Odtwarzanie", + "loadingVideo": "Ładowanie wideo", "showPlaybackControls": "Pokaż elementy sterujące odtwarzaniem", "hidePlaybackControls": "Ukryj elementy sterujące odtwarzaniem", "seekBackwardButton": "Przewiń do tyłu o ${seconds} sekund", @@ -710,7 +710,7 @@ }, "removedFromContinueWatching": "Usunięto z kontynuowania oglądania", "errorLoading": "Błąd: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Niektórych serwerów multimediów nie udało się przeszukać. Wyświetlane są dostępne wyniki.", "streamInterrupted": "Strumień został przerwany. Naciśnij odtwarzanie lub przewiń, aby spróbować ponownie.", "liveStreamInterrupted": "Transmisja na żywo została przerwana. Naciśnij odtwarzanie, aby spróbować ponownie.", "fileInfoNotAvailable": "Informacje o pliku niedostępne", @@ -749,8 +749,8 @@ "switchingToCompatiblePlayer": "Przełączanie na kompatybilny odtwarzacz...", "serverLimitTitle": "Odtwarzanie nie powiodło się", "serverLimitBody": "Błąd serwera (HTTP 500). Limit przepustowości/transkodowania prawdopodobnie odrzucił tę sesję. Poproś właściciela o zmianę.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Plik niedostępny", + "mediaUnreadableBody": "Serwer znalazł ten element, ale nie mógł odczytać jego pliku (HTTP 404). Plik został prawdopodobnie przeniesiony, usunięty albo jego pamięć masowa jest niedostępna. Poproś właściciela serwera o sprawdzenie pliku i ponowne przeskanowanie biblioteki.", "logsUploaded": "Logi przesłane", "logsUploadFailed": "Nie udało się przesłać logów", "logId": "ID logu" @@ -869,8 +869,8 @@ "sessionExpiredOne": "Sesja wygasła dla ${name}", "sessionExpiredMany": "Sesja wygasła dla ${count} serwerów", "signInAgain": "Zaloguj się ponownie", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Edytuj połączenie z ${product}", + "editMediaBrowserIntro": "Dodaj lub usuń adresy URL dla ${serverName}. Plezy będzie używać osiągalnego adresu URL o najniższym opóźnieniu." }, "discover": { "title": "Odkryj", @@ -900,7 +900,7 @@ }, "errors": { "searchFailed": "Wyszukiwanie nie powiodło się: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Wyszukiwanie nie mogło połączyć się z żadnym serwerem multimediów.", "connectionTimeout": "Limit czasu połączenia przy ładowaniu ${context}", "connectionFailed": "Nie można połączyć się z serwerem multimediów", "unableToLoad": "Nie udało się załadować ${context}. Spróbuj ponownie.", @@ -1028,36 +1028,36 @@ "uploadLogs": "Prześlij logi" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Nie udało się uruchomić Plezy", + "failedBody": "Coś poszło nie tak podczas uruchamiania. Poniższe szczegóły wskazują, co zawiodło.", + "failedBodyRepairable": "Zapisany plik ustawień Plezy jest uszkodzony i musi zostać odbudowany, zanim Plezy będzie mogło się uruchomić. Ponawianie nie pomoże — wybierz Napraw pamięć.", + "phaseLabel": "Krok", + "showDetails": "Pokaż szczegóły", + "hideDetails": "Ukryj szczegóły", + "copyDetails": "Kopiuj szczegóły", + "detailsCopied": "Skopiowano szczegóły do schowka", + "uploadDetails": "Prześlij szczegóły", + "repairStorage": "Napraw pamięć", + "repairTitle": "Naprawić zapisane dane?", + "repairBodyCommon": "Plik ustawień Plezy jest uszkodzony i nie można go odczytać. Naprawa przywraca wszystkie ustawienia do wartości domyślnych.", + "repairBodyOneCredential": "Jedno zapisane logowanie jest uszkodzone i nie można go odczytać. Naprawa usunie tylko je; pozostałe ustawienia pozostaną nietknięte.", + "repairBodySignInsKept": "Twoje serwery i profile powinny pozostać zalogowane.", + "repairBodySignInsLost": "Klucza chroniącego zapisane logowania nie można odzyskać z tego pliku, więc będziesz musiał zalogować się ponownie na każdym serwerze i profilu. Nic na Twoim serwerze multimediów nie zostanie zmienione.", + "repairBodySessionsUncertain": "Usługi śledzenia (MAL, AniList, Simkl, Trakt) i Seerr są przechowywane osobno i mogą, ale nie muszą przetrwać. Plezy dokładnie poinformuje Cię, co zachowało.", + "repairConfirm": "Napraw", + "repairSucceeded": "Naprawiono pamięć", + "repairNeedsRestart": "Naprawiono pamięć — wymagany restart", + "restartRequiredBody": "Twoje dane zostały naprawione, ale Plezy musi uruchomić się od nowa, zanim będzie mogło z nich korzystać. Zamknij Plezy i otwórz je ponownie.", + "quitPlezy": "Zamknij Plezy", + "repairFailed": "Naprawa nie powiodła się", + "repairKeptSignIns": "Twoje serwery i profile są nadal zalogowane.", + "repairLostSignIns": "Nie udało się odzyskać klucza chroniącego zapisane logowania. Musisz zalogować się ponownie na każdym serwerze i profilu.", + "repairLostSessions": "Utracono co najmniej jedno połączenie z usługą śledzenia lub Seerr i trzeba je ponownie połączyć.", + "backupTitle": "Zachowano kopię uszkodzonego pliku", + "backupWarning": "Zawiera Twoje dane logowania. Nie przesyłaj ani nie udostępniaj jej.", + "deleteBackup": "Usuń kopię", + "backupDeleted": "Usunięto kopię.", + "previousFailureTitle": "Ostatnim razem nie udało się uruchomić Plezy" }, "licenses": { "relatedPackages": "Powiązane pakiety", @@ -1117,140 +1117,140 @@ "searchPrompt": "Szukaj filmów i seriali w ${source}.", "searchFailed": "Wyszukiwanie nie powiodło się. Sprawdź połączenie i spróbuj ponownie.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} popularne", + "rankAiring": "#${n} emitowane", + "rankRated": "#${n} najwyżej oceniane", + "rankFavorited": "#${n} w ulubionych", + "rankTrending": "#${n} na czasie", + "rankSeasonal": "#${n} w sezonie ${season}", + "watchingNow": "${n} ogląda teraz", + "available": "Dostępne", + "partiallyAvailable": "Częściowo dostępne", + "availableIn4k": "Dostępne w 4K", + "requested": "Zamówiono", + "pendingApproval": "Oczekuje na zatwierdzenie", + "processing": "Przetwarzanie", + "declined": "Odrzucono", + "requestFailed": "Żądanie nie powiodło się", + "requested4k": "Zamówiono w 4K", + "seasonsAvailable": "${available}/${total} sezonów", + "nextEpisodeIn": "Odc. ${episode} za ${duration}", + "nextAiringIn": "Następny za ${duration}", + "episodesShort": "${n} odc.", + "minutesPerEpisode": "${n} min/odc.", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} na listach", + "viewersDay": "${n} obejrzało dziś", + "viewersWeek": "${n} obejrzało w tym tygodniu", + "viewersMonth": "${n} obejrzało w tym miesiącu", + "viewersYear": "${n} obejrzało w tym roku", + "viewersAllTime": "${n} widzów", + "planning": "${n} planuje obejrzeć", + "favorited": "${n} w ulubionych", + "dropRate": "${percent} porzuciło", "comments": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "${n} komentarz", + "few": "${n} komentarze", + "many": "${n} komentarzy", + "other": "${n} komentarza" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} głosów", + "watching": "${n} ogląda", + "completed": "${n} ukończyło", + "onHold": "${n} wstrzymało", + "dropped": "${n} porzuciło" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Zima", + "spring": "Wiosna", + "summer": "Lato", + "fall": "Jesień", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV Short", + "movie": "Film", + "special": "Odcinek specjalny", + "ova": "OVA", + "ona": "ONA", + "music": "Muzyka", + "other": "Inne" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Oryginał", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Powieść", + "visualNovel": "Visual novel", + "game": "Gra", + "webComic": "Komiks internetowy", + "musicRelease": "Muzyka", + "otherMedia": "Inne" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Reżyser", + "writer": "Scenarzysta", + "producer": "Producent", + "creator": "Twórca", + "composer": "Kompozytor" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Sequel", + "sideStory": "Poboczna historia", + "spinOff": "Spin-off", + "alternativeVersion": "Wersja alternatywna", + "summary": "Streszczenie", + "parentStory": "Historia pierwotna", + "adaptation": "Adaptacja", + "other": "Powiązane" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Emisja ${day} o ${time}", + "broadcastWithZone": "Emisja ${day} o ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Tytuł oryginalny", + "alsoKnownAs": "Znany również jako", + "studios": "Studia", + "country": "Kraj", + "language": "Język", + "released": "Premiera", + "physicalRelease": "Na nośniku", + "ended": "Zakończony", + "addedOn": "Dodano ${date}", + "yourRating": "Twoja ocena", + "budget": "Budżet", + "revenue": "Box office", + "contentAdvisory": "Klasyfikacja wiekowa", + "tags": "Tagi", + "revealSpoilerTags": "Pokaż tagi zawierające spoilery", + "links": "Linki", + "watchOn": "Oglądaj na", + "watchTrailer": "Obejrzyj zwiastun", + "openOn": "Otwórz na ${site}", + "crew": "Obsada i ekipa", + "ratings": "Oceny", + "schedule": "Harmonogram", "recommendedByUsers": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "Polecany przez ${n} użytkownika", + "few": "Polecany przez ${n} użytkowników", + "many": "Polecany przez ${n} użytkowników", + "other": "Polecany przez ${n} użytkownika" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Polecany przez ${who}", + "favoritedBy": "Dodany do ulubionych przez ${who}", + "unairedEpisodes": "${n} jeszcze nie wyemitowano", + "recommendedByPercent": "Polecany przez ${percent} widzów", + "relatedTitles": "Powiązane tytuły", + "background": "Tło" }, "totalResults": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "${n} wynik", + "few": "${n} wyniki", + "many": "${n} wyników", + "other": "${n} wyniku" } }, "liveTv": { @@ -1519,15 +1519,15 @@ "editSyncRule": "Edytuj regułę synchronizacji", "removeSyncRule": "Usuń regułę synchronizacji", "removeSyncRuleConfirm": "Zatrzymać synchronizację \"${title}\"? Pobrane odcinki zostaną zachowane.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Zatrzymać synchronizację \"${title}\"?", + "deleteSyncRuleDownloads": "Usuń również powiązane pobrania", + "deleteSyncRuleDownloadsDescription": "Pobrania używane przez inną regułę synchronizacji lub profil zostaną zachowane.", "syncRuleCreated": "Reguła synchronizacji utworzona — zachowywanie ${count} nieobejrzanych odcinków", "syncRuleUpdated": "Reguła synchronizacji zaktualizowana", "syncRuleRemoved": "Reguła synchronizacji usunięta", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Usunięto regułę synchronizacji i powiązane pobrania", + "syncRuleCleanupBusy": "Reguły synchronizacji są aktualnie aktualizowane. Spróbuj ponownie za chwilę.", + "syncRuleCleanupUnavailable": "Nie udało się bezpiecznie zidentyfikować powiązanych pobrań. Połącz się ponownie z serwerem i spróbuj ponownie albo usuń regułę bez usuwania pobrań.", "syncedNewEpisodes": "Zsynchronizowano ${count} nowych odcinków dla ${title}", "activeSyncRules": "Reguły synchronizacji", "noSyncRules": "Brak reguł synchronizacji", @@ -1892,7 +1892,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Aktywuj Plezy w ${service}", @@ -1925,12 +1925,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Dodaj serwer ${product}", "serverUrls": "Adresy URL serwera", "serverUrlsHelper": "Można podać wiele adresów URL rozdzielonych przecinkami.", "findServer": "Znajdź serwer", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Szukanie lokalnych serwerów ${product}...", + "localMediaBrowserServers": "Lokalne serwery ${product}", "username": "Nazwa użytkownika", "password": "Hasło", "signIn": "Zaloguj się", @@ -1942,15 +1942,15 @@ "addPlexTitle": "Zaloguj się przez Plex", "pinExpired": "PIN wygasł przed zalogowaniem. Spróbuj ponownie.", "failedToRegisterAccount": "Nie udało się zarejestrować konta: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Podaj adres URL serwera ${product}", "addConnectionTitle": "Dodaj połączenie", "addConnectionTitleScoped": "Dodaj do ${name}", "signInWithPlexCard": "Zaloguj się przez Plex", "signInWithPlexCardSubtitle": "Autoryzuj to urządzenie. Serwery udostępnione zostaną dodane.", "signInWithPlexCardSubtitleScoped": "Autoryzuj konto Plex. Użytkownicy Home staną się profilami.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Połącz z ${product}", + "connectToMediaBrowserCardSubtitle": "Podaj adres URL serwera, nazwę użytkownika i hasło.", + "connectToMediaBrowserCardSubtitleScoped": "Zaloguj się do serwera ${product}. Powiązane z ${name}.", "borrowFromAnotherProfile": "Pożycz z innego profilu", "borrowFromAnotherProfileSubtitle": "Użyj połączenia innego profilu. Profile chronione PIN-em wymagają podania PIN-u." } diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index a94100ee..26a4975e 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Aguardando autenticação...\nEntre pelo navegador.", "useBrowser": "Usar navegador", "or": "ou", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Conectar ao ${product}", "useQuickConnect": "Usar Quick Connect", "quickConnectInstructions": "Abra o Quick Connect no Jellyfin e insira este código.", "quickConnectWaiting": "Aguardando aprovação…", @@ -66,17 +66,17 @@ "exitFullscreen": "Sair da tela cheia", "pressBackAgainToExit": "Pressione voltar novamente para sair", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Críticos", + "audience": "Público", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Críticos do Rotten Tomatoes", + "rottenTomatoesAudience": "Público do Rotten Tomatoes" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Escuro", "oledTheme": "OLED", "libraryDensity": "Densidade da Biblioteca", - "displayScale": "", + "displayScale": "Escala de exibição", "compact": "Compacto", "comfortable": "Confortável", "tvCornerSpotlightBackdrop": "Imagem de destaque no canto", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "Automático (Recomendado)", "bufferSizeWarning": "${heap}MB de memória disponível. Um buffer de ${size}MB pode afetar a reprodução.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Buffer de reprodução", + "playbackBufferAuto": "Automático (recomendado)", + "playbackBufferLarge": "Grande", + "playbackBufferExtraLarge": "Extra grande", + "playbackBufferDescription": "Faz buffer extra contra conexões instáveis. Também limitado pelo tamanho do buffer.", "defaultQualityTitle": "Qualidade padrão", "musicQualityTitle": "Qualidade da música", "subtitleStyling": "Estilo de Legendas", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Ativar log detalhado para solução de problemas", "viewLogs": "Ver Logs", "viewLogsDescription": "Ver logs do app", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Limpar cache de imagens", + "clearImageCacheDescription": "Limpar artes e miniaturas em cache. As imagens podem carregar mais devagar até serem baixadas novamente.", + "clearImageCacheSuccess": "Cache de imagens limpo com sucesso", "resetSettings": "Redefinir Configurações", "resetSettingsDescription": "Restaurar configurações padrão. Não pode ser desfeito.", "resetSettingsSuccess": "Configurações redefinidas com sucesso", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Informações do arquivo", - "overview": "", + "overview": "Visão geral", "video": "Vídeo", "audio": "Áudio", "subtitles": "Legendas", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Imagens incorporadas", + "dataStreams": "Fluxos de dados", + "lyrics": "Letras", "file": "Arquivo", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Anexos", + "delivery": "Entrega", + "versionCounter": "Versão ${index} de ${count}", + "fileCounter": "Arquivo ${index} de ${count}", + "noStreams": "O servidor não relatou fluxos para este arquivo.", + "copyPath": "Copiar caminho", + "pathCopied": "Caminho do arquivo copiado", "codec": "Codec", - "codecTag": "", + "codecTag": "Tag do codec", "resolution": "Resolução", - "codedResolution": "", + "codedResolution": "Resolução codificada", "bitrate": "Taxa de bits", "frameRate": "Taxa de Quadros", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotação", + "comment": "Comentário", + "audioDescription": "Descrição de áudio", + "headerCompression": "Compactação de cabeçalho", + "sidecarFile": "Arquivo sidecar", + "transportTimestamp": "Carimbo de transporte", + "displayOffset": "Deslocamento de exibição", + "previewFailureCode": "Código de falha da pré-visualização", + "previewRetries": "Tentativas da pré-visualização", "aspectRatio": "Proporção", - "pixelAspectRatio": "", + "pixelAspectRatio": "Proporção de aspecto de pixel", "profile": "Perfil", - "level": "", + "level": "Nível", "bitDepth": "Profundidade de bits", - "pixelFormat": "", + "pixelFormat": "Formato de pixel", "colorSpace": "Espaço de Cor", "colorRange": "Faixa de Cor", "colorPrimaries": "Primárias de Cor", - "colorTransfer": "", + "colorTransfer": "Transferência de cor", "chromaSubsampling": "Subamostragem de Croma", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Localização do croma", + "scanType": "Tipo de varredura", + "interlaced": "Entrelaçado", + "anamorphic": "Anamórfico", + "referenceFrames": "Quadros de referência", + "dynamicRange": "Faixa dinâmica", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Nível Dolby Vision", + "dolbyVisionVersion": "Versão Dolby Vision", + "dolbyVisionLayers": "Camadas Dolby Vision", + "baseLayerCompatibility": "Compatibilidade da camada base", + "avcBitstream": "Bitstream AVC", + "nalLengthSize": "Tamanho do comprimento NAL", + "scalingMatrix": "Matriz de dimensionamento personalizada", + "streamIdentifier": "Identificador do fluxo", + "streamIndex": "Índice do fluxo", + "streamId": "ID do fluxo", + "language": "Idioma", + "languageCode": "Código do idioma", + "streamTitle": "Título da faixa", "channels": "Canais", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Taxa de amostragem", + "spatialAudio": "Áudio espacial", + "textBased": "Baseado em texto", + "subtitleFormat": "Formato sidecar", + "provider": "Provedor", + "matchScore": "Pontuação de correspondência", + "externalDelivery": "Pode ser servido separadamente", + "sidecarPath": "Caminho do sidecar", + "sourceStream": "Copiado de", + "temporary": "Temporário", + "timeBase": "Base de tempo", "overallBitrate": "Taxa de bits total", "path": "Caminho", - "fileName": "", + "fileName": "Nome do arquivo", "size": "Tamanho", - "totalSize": "", + "totalSize": "Tamanho total", "container": "Contêiner", "duration": "Duração", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Miniaturas de pré-visualização", + "previewIndex": "Índice de pré-visualização", + "packetLength": "Tamanho do pacote", + "filePresent": "Arquivo presente", + "fileReadable": "Legível pelo servidor", + "streamPath": "Caminho do fluxo", "optimizedForStreaming": "Otimizado para transmissão", "has64bitOffsets": "Deslocamentos de 64 bits", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protocolo", + "mediaType": "Tipo de mídia", + "sourceKind": "Tipo de origem", + "optimizedVersion": "Versão otimizada", + "optimizationTarget": "Alvo de otimização", + "deletedAt": "Excluído", + "remoteSource": "Origem remota", + "infiniteStream": "Fluxo infinito", + "directPlay": "Reprodução direta", + "directStream": "Fluxo direto", + "transcoding": "Transcodificação", + "etag": "ETag", + "versionId": "ID da versão", + "fileId": "ID do arquivo", + "defaultAudioTrack": "Faixa de áudio padrão", + "defaultSubtitleTrack": "Faixa de legenda padrão", + "subtitlesOff": "Desativadas", + "flagDefault": "Padrão", + "flagForced": "Forçada", + "flagSelected": "Selecionada", + "flagExternal": "Externa", + "flagHearingImpaired": "Deficiência auditiva", + "flagDub": "Dublada", + "flagOriginal": "Original" }, "mediaMenu": { "markAsWatched": "Marcar como Assistido", @@ -524,35 +524,35 @@ "shufflePlay": "Reprodução Aleatória", "shuffleNotAvailableOffline": "Reprodução aleatória indisponível offline", "fileInfo": "Informações do arquivo", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Excluir episódio do servidor", + "deleteSeasonFromServer": "Excluir temporada do servidor", + "deleteShowFromServer": "Excluir série do servidor", + "deleteMovieFromServer": "Excluir filme do servidor", + "deleteEpisodeTitle": "Excluir este episódio?", + "deleteSeasonTitle": "Excluir esta temporada?", + "deleteShowTitle": "Excluir esta série?", + "deleteMovieTitle": "Excluir este filme?", + "deleteEpisodeConfirm": "Excluir episódio", + "deleteSeasonConfirm": "Excluir temporada", + "deleteShowConfirm": "Excluir série", + "deleteMovieConfirm": "Excluir filme", + "deleteAnyway": "Excluir mesmo assim", + "confirmDeleteTarget": "Excluir permanentemente ${title} do seu servidor?", "deleteMultipleWarning": "Isso inclui todos os episódios e seus arquivos.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Isso exclui o ${n} episódio e o arquivo dele.", + "other": "Isso exclui todos os ${n} episódios e os arquivos deles." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Este item está armazenado como ${n} arquivo, que será excluído.", + "other": "Este item está armazenado em ${n} arquivos, e todos eles serão excluídos." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "Mais ${n} episódio está armazenado no mesmo arquivo e também será excluído:", + "other": "Mais ${n} episódios estão armazenados no mesmo arquivo e também serão excluídos:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "O Plezy não conseguiu verificar quais arquivos serão removidos, então pode excluir mais do que o item acima. Cancele e tente novamente, ou exclua mesmo assim.", + "deleteScopeUnverifiedNoFileInfo": "Seu servidor não forneceu detalhes do arquivo para este item, então o Plezy não pode verificar quais arquivos serão removidos. Pode excluir mais do que o item acima.", "mediaDeletedSuccessfully": "Item de mídia excluído com sucesso", "mediaFailedToDelete": "Falha ao excluir item de mídia", "rate": "Avaliar", @@ -628,9 +628,9 @@ "playNext": "Reproduzir Próximo", "playButton": "Reproduzir", "pauseButton": "Pausar", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Pausado", + "playbackResumed": "Reproduzindo", + "loadingVideo": "Carregando vídeo", "showPlaybackControls": "Mostrar controles de reprodução", "hidePlaybackControls": "Ocultar controles de reprodução", "seekBackwardButton": "Retroceder ${seconds} segundos", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Removido de Continuar assistindo", "errorLoading": "Erro: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Alguns servidores de mídia não puderam ser pesquisados. Exibindo os resultados disponíveis.", "streamInterrupted": "A transmissão foi interrompida. Pressione reproduzir ou avance para tentar novamente.", "liveStreamInterrupted": "A transmissão ao vivo foi interrompida. Pressione reproduzir para tentar novamente.", "fileInfoNotAvailable": "Informações do arquivo não disponíveis", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Alternando para um reprodutor compatível...", "serverLimitTitle": "Falha na reprodução", "serverLimitBody": "Erro do servidor (HTTP 500). Um limite de largura de banda ou transcodificação provavelmente rejeitou esta sessão. Peça ao proprietário do servidor para ajustá-lo.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Arquivo indisponível", + "mediaUnreadableBody": "O servidor encontrou este item, mas não conseguiu ler o arquivo (HTTP 404). O arquivo provavelmente foi movido, excluído ou o armazenamento está offline. Peça ao responsável pelo servidor para verificar o arquivo e reexaminar a biblioteca.", "logsUploaded": "Logs enviados", "logsUploadFailed": "Falha ao enviar logs", "logId": "ID do log" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Sessão de ${name} expirada", "sessionExpiredMany": "Sessões expiradas em ${count} servidores", "signInAgain": "Entrar novamente", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Editar conexão do ${product}", + "editMediaBrowserIntro": "Adicione ou remova URLs para ${serverName}. O Plezy usará a URL acessível com menor latência." }, "discover": { "title": "Descobrir", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Falha na busca: ${error}", - "searchUnavailable": "", + "searchUnavailable": "A busca não conseguiu alcançar nenhum servidor de mídia.", "connectionTimeout": "Tempo de conexão esgotado ao carregar ${context}", "connectionFailed": "Não foi possível conectar ao servidor de mídia", "unableToLoad": "Não foi possível carregar ${context}. Tente novamente.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Enviar Logs" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "O Plezy não conseguiu iniciar", + "failedBody": "Algo deu errado durante a inicialização. Os detalhes abaixo identificam o que falhou.", + "failedBodyRepairable": "O arquivo de configurações salvo do Plezy está danificado e precisa ser reconstruído antes que o Plezy possa iniciar. Tentar novamente não vai ajudar — escolha Reparar armazenamento.", + "phaseLabel": "Etapa", + "showDetails": "Mostrar detalhes", + "hideDetails": "Ocultar detalhes", + "copyDetails": "Copiar detalhes", + "detailsCopied": "Detalhes copiados para a área de transferência", + "uploadDetails": "Enviar detalhes", + "repairStorage": "Reparar armazenamento", + "repairTitle": "Reparar dados armazenados?", + "repairBodyCommon": "O arquivo de configurações do Plezy está danificado e não pode ser lido. Reparar redefine todas as configurações para o padrão.", + "repairBodyOneCredential": "Um login salvo está danificado e não pode ser lido. Reparar remove apenas ele; suas outras configurações permanecem intactas.", + "repairBodySignInsKept": "Seus servidores e perfis devem permanecer conectados.", + "repairBodySignInsLost": "A chave que protege seus logins salvos não pode ser recuperada deste arquivo, então você terá que entrar novamente em todos os servidores e perfis. Nada no seu servidor de mídia é afetado.", + "repairBodySessionsUncertain": "Os rastreadores (MAL, AniList, Simkl, Trakt) e o Seerr são armazenados separadamente e podem ou não ser preservados. O Plezy informará exatamente o que foi mantido.", + "repairConfirm": "Reparar", + "repairSucceeded": "Armazenamento reparado", + "repairNeedsRestart": "Armazenamento reparado — reinício necessário", + "restartRequiredBody": "Seus dados foram reparados, mas o Plezy precisa iniciar do zero antes de usá-los. Feche o Plezy e abra-o novamente.", + "quitPlezy": "Sair do Plezy", + "repairFailed": "Falha no reparo", + "repairKeptSignIns": "Seus servidores e perfis ainda estão conectados.", + "repairLostSignIns": "A chave que protege seus logins salvos não pôde ser recuperada. Você terá que entrar novamente em todos os servidores e perfis.", + "repairLostSessions": "Pelo menos uma conexão de rastreador ou do Seerr foi perdida e precisa ser reconectada.", + "backupTitle": "Uma cópia do arquivo danificado foi mantida", + "backupWarning": "Ele contém suas credenciais de login. Não envie nem compartilhe.", + "deleteBackup": "Excluir cópia", + "backupDeleted": "Cópia excluída.", + "previousFailureTitle": "O Plezy falhou ao iniciar da última vez" }, "licenses": { "relatedPackages": "Pacotes Relacionados", @@ -1107,134 +1107,134 @@ "searchPrompt": "Busque filmes e séries em ${source}.", "searchFailed": "Falha na busca. Verifique sua conexão e tente novamente.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} popular", + "rankAiring": "#${n} no ar", + "rankRated": "#${n} avaliado", + "rankFavorited": "#${n} favoritado", + "rankTrending": "#${n} em alta", + "rankSeasonal": "#${n} em ${season}", + "watchingNow": "${n} assistindo", + "available": "Disponível", + "partiallyAvailable": "Parcialmente disponível", + "availableIn4k": "4K disponível", + "requested": "Solicitado", + "pendingApproval": "Aguardando aprovação", + "processing": "Processando", + "declined": "Recusado", + "requestFailed": "Falha na solicitação", + "requested4k": "4K solicitado", + "seasonsAvailable": "${available}/${total} temporadas", + "nextEpisodeIn": "Ep ${episode} em ${duration}", + "nextAiringIn": "Próximo em ${duration}", + "episodesShort": "${n} epps", + "minutesPerEpisode": "${n} min/ep", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} listados", + "viewersDay": "${n} assistiram hoje", + "viewersWeek": "${n} assistiram esta semana", + "viewersMonth": "${n} assistiram este mês", + "viewersYear": "${n} assistiram este ano", + "viewersAllTime": "${n} espectadores", + "planning": "${n} pretendem assistir", + "favorited": "${n} favoritos", + "dropRate": "${percent} abandonaram", "comments": { - "one": "", - "other": "" + "one": "${n} comentário", + "other": "${n} comentários" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} votos", + "watching": "${n} assistindo", + "completed": "${n} concluíram", + "onHold": "${n} em pausa", + "dropped": "${n} abandonaram" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Inverno", + "spring": "Primavera", + "summer": "Verão", + "fall": "Outono", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "Curta de TV", + "movie": "Filme", + "special": "Especial", + "ova": "OVA", + "ona": "ONA", + "music": "Música", + "other": "Outro" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Original", + "manga": "Mangá", + "lightNovel": "Light novel", + "novel": "Romance", + "visualNovel": "Visual novel", + "game": "Jogo", + "webComic": "Webcomic", + "musicRelease": "Música", + "otherMedia": "Outro" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Diretor", + "writer": "Roteirista", + "producer": "Produtor", + "creator": "Criador", + "composer": "Compositor" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequela", + "sequel": "Sequela", + "sideStory": "História paralela", + "spinOff": "Spin-off", + "alternativeVersion": "Versão alternativa", + "summary": "Resumo", + "parentStory": "História principal", + "adaptation": "Adaptação", + "other": "Relacionado" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Vai ao ar ${day} às ${time}", + "broadcastWithZone": "Vai ao ar ${day} às ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Título original", + "alsoKnownAs": "Também conhecido como", + "studios": "Estúdios", + "country": "País", + "language": "Idioma", + "released": "Lançado", + "physicalRelease": "Em disco", + "ended": "Encerrado", + "addedOn": "Adicionado em ${date}", + "yourRating": "Sua avaliação", + "budget": "Orçamento", + "revenue": "Bilheteria", + "contentAdvisory": "Classificação indicativa", + "tags": "Tags", + "revealSpoilerTags": "Mostrar tags de spoiler", + "links": "Links", + "watchOn": "Assistir em", + "watchTrailer": "Ver trailer", + "openOn": "Abrir em ${site}", + "crew": "Equipe", + "ratings": "Avaliações", + "schedule": "Programação", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Recomendado por ${n} usuário", + "other": "Recomendado por ${n} usuários" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Recomendado por ${who}", + "favoritedBy": "Favoritado por ${who}", + "unairedEpisodes": "${n} ainda não exibidos", + "recommendedByPercent": "Recomendado por ${percent} dos espectadores", + "relatedTitles": "Títulos relacionados", + "background": "Contexto" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} resultado", + "other": "${n} resultados" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Editar regra de sincronização", "removeSyncRule": "Remover regra de sincronização", "removeSyncRuleConfirm": "Parar de sincronizar \"${title}\"? Os episódios baixados serão mantidos.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Parar a sincronização de \"${title}\"?", + "deleteSyncRuleDownloads": "Também excluir downloads associados", + "deleteSyncRuleDownloadsDescription": "Downloads usados por outra regra de sincronização ou perfil serão mantidos.", "syncRuleCreated": "Regra de sincronização criada — mantendo ${count} episódios não assistidos", "syncRuleUpdated": "Regra de sincronização atualizada", "syncRuleRemoved": "Regra de sincronização removida", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Regra de sincronização e downloads associados removidos", + "syncRuleCleanupBusy": "As regras de sincronização estão sendo atualizadas. Tente novamente em instantes.", + "syncRuleCleanupUnavailable": "Os downloads associados não puderam ser identificados com segurança. Reconecte o servidor e tente novamente, ou remova a regra sem excluir os downloads.", "syncedNewEpisodes": "${count} novos episódios sincronizados para ${title}", "activeSyncRules": "Regras de sincronização", "noSyncRules": "Nenhuma regra de sincronização", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Ativar o Plezy no ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Adicionar servidor ${product}", "serverUrls": "URLs do servidor", "serverUrlsHelper": "Várias URLs são permitidas, separadas por vírgulas.", "findServer": "Encontrar servidor", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Procurando servidores ${product} locais...", + "localMediaBrowserServers": "Servidores ${product} locais", "username": "Usuário", "password": "Senha", "signIn": "Entrar", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Entrar com Plex", "pinExpired": "O PIN expirou antes de entrar. Tente novamente.", "failedToRegisterAccount": "Falha ao registrar a conta: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Digite a URL do seu servidor ${product}", "addConnectionTitle": "Adicionar conexão", "addConnectionTitleScoped": "Adicionar a ${name}", "signInWithPlexCard": "Entrar com Plex", "signInWithPlexCardSubtitle": "Autorize este dispositivo. Servidores compartilhados são adicionados.", "signInWithPlexCardSubtitleScoped": "Autorize uma conta Plex. Os usuários do Plex Home se tornam perfis.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Conectar ao ${product}", + "connectToMediaBrowserCardSubtitle": "Digite a URL do servidor, o nome de usuário e a senha.", + "connectToMediaBrowserCardSubtitleScoped": "Entre no seu servidor ${product}. Vinculado a ${name}.", "borrowFromAnotherProfile": "Pegar emprestado de outro perfil", "borrowFromAnotherProfileSubtitle": "Reutilize a conexão de outro perfil. Perfis protegidos por PIN exigem PIN." } diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index fb55cd94..d13a3b84 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Ожидание аутентификации...\nВыполните вход в браузере.", "useBrowser": "Использовать браузер", "or": "или", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Подключиться к ${product}", "useQuickConnect": "Использовать Quick Connect", "quickConnectInstructions": "Откройте Quick Connect в Jellyfin и введите этот код.", "quickConnectWaiting": "Ожидание подтверждения…", @@ -66,17 +66,17 @@ "exitFullscreen": "Выйти из полноэкранного режима", "pressBackAgainToExit": "Нажмите ещё раз для выхода", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Критики", + "audience": "Зрители", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Критики Rotten Tomatoes", + "rottenTomatoesAudience": "Зрители Rotten Tomatoes" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Тёмная", "oledTheme": "OLED", "libraryDensity": "Плотность библиотеки", - "displayScale": "", + "displayScale": "Масштаб отображения", "compact": "Компактный", "comfortable": "Комфортный", "tvCornerSpotlightBackdrop": "Фоновое изображение в углу", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}МБ", "bufferSizeAuto": "Авто (Рекомендуется)", "bufferSizeWarning": "Доступно памяти: ${heap} МБ. Буфер размером ${size} МБ может повлиять на воспроизведение.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Буфер воспроизведения", + "playbackBufferAuto": "Авто (рекомендуется)", + "playbackBufferLarge": "Большой", + "playbackBufferExtraLarge": "Очень большой", + "playbackBufferDescription": "Буферизирует больше при нестабильном соединении. Также ограничено размером буфера.", "defaultQualityTitle": "Качество по умолчанию", "musicQualityTitle": "Качество музыки", "subtitleStyling": "Стиль субтитров", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Включить подробное журналирование для устранения неполадок", "viewLogs": "Просмотр логов", "viewLogsDescription": "Просмотр логов приложения", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Очистить кэш изображений", + "clearImageCacheDescription": "Очистить кэшированные обложки и миниатюры. Изображения могут загружаться медленнее, пока не будут загружены снова.", + "clearImageCacheSuccess": "Кэш изображений успешно очищен", "resetSettings": "Сбросить настройки", "resetSettingsDescription": "Восстановить настройки по умолчанию. Это нельзя отменить.", "resetSettingsSuccess": "Настройки успешно сброшены", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Информация о файле", - "overview": "", + "overview": "Обзор", "video": "Видео", "audio": "Аудио", "subtitles": "Субтитры", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Встроенные изображения", + "dataStreams": "Потоки данных", + "lyrics": "Текст песни", "file": "Файл", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Вложения", + "delivery": "Доставка", + "versionCounter": "Версия ${index} из ${count}", + "fileCounter": "Файл ${index} из ${count}", + "noStreams": "Сервер не сообщил о потоках для этого файла.", + "copyPath": "Копировать путь", + "pathCopied": "Путь к файлу скопирован", "codec": "Кодек", - "codecTag": "", + "codecTag": "Тег кодека", "resolution": "Разрешение", - "codedResolution": "", + "codedResolution": "Кодированное разрешение", "bitrate": "Битрейт", "frameRate": "Частота кадров", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Поворот", + "comment": "Комментарий", + "audioDescription": "Аудиоописание", + "headerCompression": "Сжатие заголовков", + "sidecarFile": "Файл-спутник", + "transportTimestamp": "Метка времени транспорта", + "displayOffset": "Смещение отображения", + "previewFailureCode": "Код ошибки превью", + "previewRetries": "Повторные попытки превью", "aspectRatio": "Соотношение сторон", - "pixelAspectRatio": "", + "pixelAspectRatio": "Попиксельное соотношение сторон", "profile": "Профиль", - "level": "", + "level": "Уровень", "bitDepth": "Глубина цвета", - "pixelFormat": "", + "pixelFormat": "Формат пикселей", "colorSpace": "Цветовое пространство", "colorRange": "Цветовой диапазон", "colorPrimaries": "Основные цвета", - "colorTransfer": "", + "colorTransfer": "Передача цвета", "chromaSubsampling": "Субдискретизация цветности", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Расположение цветности", + "scanType": "Тип развёртки", + "interlaced": "Чересстрочный", + "anamorphic": "Анаморфный", + "referenceFrames": "Опорные кадры", + "dynamicRange": "Динамический диапазон", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Уровень Dolby Vision", + "dolbyVisionVersion": "Версия Dolby Vision", + "dolbyVisionLayers": "Слои Dolby Vision", + "baseLayerCompatibility": "Совместимость базового слоя", + "avcBitstream": "Битовый поток AVC", + "nalLengthSize": "Размер длины NAL", + "scalingMatrix": "Пользовательская матрица масштабирования", + "streamIdentifier": "Идентификатор потока", + "streamIndex": "Индекс потока", + "streamId": "ID потока", + "language": "Язык", + "languageCode": "Код языка", + "streamTitle": "Название дорожки", "channels": "Каналы", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Частота дискретизации", + "spatialAudio": "Пространственное аудио", + "textBased": "Текстовый", + "subtitleFormat": "Формат файла-спутника", + "provider": "Провайдер", + "matchScore": "Оценка совпадения", + "externalDelivery": "Может передаваться отдельно", + "sidecarPath": "Путь к файлу-спутнику", + "sourceStream": "Скопировано из", + "temporary": "Временный", + "timeBase": "Временная база", "overallBitrate": "Общий битрейт", "path": "Путь", - "fileName": "", + "fileName": "Имя файла", "size": "Размер", - "totalSize": "", + "totalSize": "Общий размер", "container": "Контейнер", "duration": "Длительность", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Миниатюры превью", + "previewIndex": "Индекс превью", + "packetLength": "Длина пакета", + "filePresent": "Файл присутствует", + "fileReadable": "Доступен для чтения сервером", + "streamPath": "Путь потока", "optimizedForStreaming": "Оптимизировано для потоковой передачи", "has64bitOffsets": "64-битные смещения", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Протокол", + "mediaType": "Тип медиа", + "sourceKind": "Тип источника", + "optimizedVersion": "Оптимизированная версия", + "optimizationTarget": "Цель оптимизации", + "deletedAt": "Удалено", + "remoteSource": "Удалённый источник", + "infiniteStream": "Бесконечный поток", + "directPlay": "Прямое воспроизведение", + "directStream": "Прямой поток", + "transcoding": "Транскодирование", + "etag": "ETag", + "versionId": "ID версии", + "fileId": "ID файла", + "defaultAudioTrack": "Аудиодорожка по умолчанию", + "defaultSubtitleTrack": "Дорожка субтитров по умолчанию", + "subtitlesOff": "Выкл.", + "flagDefault": "По умолчанию", + "flagForced": "Принудительная", + "flagSelected": "Выбрана", + "flagExternal": "Внешняя", + "flagHearingImpaired": "Для слабослышащих", + "flagDub": "Дубляж", + "flagOriginal": "Оригинал" }, "mediaMenu": { "markAsWatched": "Отметить как просмотренное", @@ -524,41 +524,41 @@ "shufflePlay": "Случайное воспроизведение", "shuffleNotAvailableOffline": "Перемешивание недоступно офлайн", "fileInfo": "Информация о файле", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Удалить эпизод с сервера", + "deleteSeasonFromServer": "Удалить сезон с сервера", + "deleteShowFromServer": "Удалить сериал с сервера", + "deleteMovieFromServer": "Удалить фильм с сервера", + "deleteEpisodeTitle": "Удалить этот эпизод?", + "deleteSeasonTitle": "Удалить этот сезон?", + "deleteShowTitle": "Удалить этот сериал?", + "deleteMovieTitle": "Удалить этот фильм?", + "deleteEpisodeConfirm": "Удалить эпизод", + "deleteSeasonConfirm": "Удалить сезон", + "deleteShowConfirm": "Удалить сериал", + "deleteMovieConfirm": "Удалить фильм", + "deleteAnyway": "Всё равно удалить", + "confirmDeleteTarget": "Навсегда удалить ${title} с вашего сервера?", "deleteMultipleWarning": "Это включает все эпизоды и их файлы.", "deleteEpisodeCountWarning": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "Это удалит содержащийся в нём ${n} эпизод и его файл.", + "few": "Это удалит содержащиеся в нём ${n} эпизода и их файлы.", + "many": "Это удалит содержащиеся в нём ${n} эпизодов и их файлы.", + "other": "Это удалит содержащиеся в нём ${n} эпизодов и их файлы." }, "deleteMultiPartWarning": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "Этот элемент хранится как ${n} файл, который будет удалён.", + "few": "Этот элемент хранится в ${n} файлах, и все они будут удалены.", + "many": "Этот элемент хранится в ${n} файлах, и все они будут удалены.", + "other": "Этот элемент хранится в ${n} файлах, и все они будут удалены." }, "deleteSharedFileHeading": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "В этом же файле хранится ещё ${n} эпизод, и он тоже будет удалён:", + "few": "В этом же файле хранятся ещё ${n} эпизода, и они тоже будут удалены:", + "many": "В этом же файле хранятся ещё ${n} эпизодов, и они тоже будут удалены:", + "other": "В этом же файле хранятся ещё ${n} эпизодов, и они тоже будут удалены:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy не смог проверить, какие файлы будут удалены, поэтому может быть удалено больше, чем указанный выше элемент. Отмените и попробуйте снова либо удалите в любом случае.", + "deleteScopeUnverifiedNoFileInfo": "Ваш сервер не предоставил сведения о файлах для этого элемента, поэтому Plezy не может проверить, какие файлы будут удалены. Может быть удалено больше, чем указанный выше элемент.", "mediaDeletedSuccessfully": "Медиаэлемент успешно удалён", "mediaFailedToDelete": "Не удалось удалить медиаэлемент", "rate": "Оценить", @@ -634,9 +634,9 @@ "playNext": "Следующее", "playButton": "Воспроизвести", "pauseButton": "Пауза", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "На паузе", + "playbackResumed": "Воспроизведение", + "loadingVideo": "Загрузка видео", "showPlaybackControls": "Показать элементы управления воспроизведением", "hidePlaybackControls": "Скрыть элементы управления воспроизведением", "seekBackwardButton": "Перемотать назад на ${seconds} с", @@ -710,7 +710,7 @@ }, "removedFromContinueWatching": "Удалено из «Продолжить просмотр»", "errorLoading": "Ошибка: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Поиск по некоторым медиасерверам не удался. Показываем доступные результаты.", "streamInterrupted": "Поток прервался. Нажмите «Воспроизвести» или перемотайте, чтобы повторить попытку.", "liveStreamInterrupted": "Прямая трансляция прервалась. Нажмите «Воспроизвести», чтобы повторить попытку.", "fileInfoNotAvailable": "Информация о файле недоступна", @@ -749,8 +749,8 @@ "switchingToCompatiblePlayer": "Переключение на совместимый плеер...", "serverLimitTitle": "Ошибка воспроизведения", "serverLimitBody": "Ошибка сервера (HTTP 500). Лимит пропускной способности/транскодирования, вероятно, отклонил сессию. Попросите владельца изменить настройки.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Файл недоступен", + "mediaUnreadableBody": "Сервер нашёл этот элемент, но не смог прочитать его файл (HTTP 404). Вероятно, файл был перемещён, удалён или его хранилище недоступно. Попросите владельца сервера проверить файл и пересканировать библиотеку.", "logsUploaded": "Логи загружены", "logsUploadFailed": "Не удалось загрузить логи", "logId": "ID лога" @@ -869,8 +869,8 @@ "sessionExpiredOne": "Сессия истекла для ${name}", "sessionExpiredMany": "Сессия истекла для ${count} серверов", "signInAgain": "Войти снова", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Изменить подключение ${product}", + "editMediaBrowserIntro": "Добавьте или удалите URL-адреса для ${serverName}. Plezy будет использовать доступный URL с наименьшей задержкой." }, "discover": { "title": "Обзор", @@ -900,7 +900,7 @@ }, "errors": { "searchFailed": "Ошибка поиска: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Поиску не удалось связаться ни с одним медиасервером.", "connectionTimeout": "Таймаут подключения при загрузке ${context}", "connectionFailed": "Не удалось подключиться к медиасерверу", "unableToLoad": "Не удалось загрузить ${context}. Повторите попытку.", @@ -1028,36 +1028,36 @@ "uploadLogs": "Загрузить логи" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy не удалось запустить", + "failedBody": "Во время запуска что-то пошло не так. Сведения ниже показывают, что именно не удалось.", + "failedBodyRepairable": "Сохранённый файл настроек Plezy повреждён, и его необходимо пересоздать, прежде чем Plezy сможет запуститься. Повторные попытки не помогут — выберите «Восстановить хранилище».", + "phaseLabel": "Шаг", + "showDetails": "Показать сведения", + "hideDetails": "Скрыть сведения", + "copyDetails": "Копировать сведения", + "detailsCopied": "Сведения скопированы в буфер обмена", + "uploadDetails": "Отправить сведения", + "repairStorage": "Восстановить хранилище", + "repairTitle": "Восстановить сохранённые данные?", + "repairBodyCommon": "Файл настроек Plezy повреждён и не может быть прочитан. Восстановление сбросит все настройки к значениям по умолчанию.", + "repairBodyOneCredential": "Одна сохранённая учётная запись повреждена и не может быть прочитана. Восстановление удалит только её; остальные настройки не будут затронуты.", + "repairBodySignInsKept": "Вход в ваши серверы и профили будет сохранён.", + "repairBodySignInsLost": "Ключ, защищающий сохранённые входы, невозможно восстановить из этого файла, поэтому вам придётся снова войти на каждый сервер и в каждый профиль. На вашем медиасервере ничего не изменится.", + "repairBodySessionsUncertain": "Трекеры (MAL, AniList, Simkl, Trakt) и Seerr хранятся отдельно и могут сохраниться или нет. Plezy точно сообщит, что удалось сохранить.", + "repairConfirm": "Восстановить", + "repairSucceeded": "Хранилище восстановлено", + "repairNeedsRestart": "Хранилище восстановлено — требуется перезапуск", + "restartRequiredBody": "Ваши данные были восстановлены, но Plezy должен запуститься заново, чтобы использовать их. Закройте Plezy и откройте его снова.", + "quitPlezy": "Выйти из Plezy", + "repairFailed": "Не удалось восстановить", + "repairKeptSignIns": "Ваши серверы и профили по-прежнему в системе.", + "repairLostSignIns": "Ключ, защищающий сохранённые входы, не удалось восстановить. Вам придётся снова войти на каждый сервер и в каждый профиль.", + "repairLostSessions": "Потеряно как минимум одно подключение трекера или Seerr — его нужно восстановить.", + "backupTitle": "Сохранена копия повреждённого файла", + "backupWarning": "Она содержит ваши учётные данные для входа. Не загружайте и не передавайте её.", + "deleteBackup": "Удалить копию", + "backupDeleted": "Копия удалена.", + "previousFailureTitle": "В прошлый раз Plezy не удалось запустить" }, "licenses": { "relatedPackages": "Связанные пакеты", @@ -1068,7 +1068,7 @@ "navigation": { "libraries": "Библиотеки", "downloads": "Загрузки", - "liveTv": "ТВ в прямом эфире", + "liveTv": "Прямой эфир", "explore": "Обзор" }, "explore": { @@ -1117,140 +1117,140 @@ "searchPrompt": "Ищите фильмы и сериалы в ${source}.", "searchFailed": "Ошибка поиска. Проверьте подключение и повторите попытку.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} по популярности", + "rankAiring": "#${n} в эфире", + "rankRated": "#${n} по оценкам", + "rankFavorited": "#${n} по избранному", + "rankTrending": "#${n} в тренде", + "rankSeasonal": "#${n} в сезоне ${season}", + "watchingNow": "${n} смотрят", + "available": "Доступно", + "partiallyAvailable": "Доступно частично", + "availableIn4k": "Доступно в 4K", + "requested": "Запрошено", + "pendingApproval": "Ожидает одобрения", + "processing": "В обработке", + "declined": "Отклонено", + "requestFailed": "Запрос не удался", + "requested4k": "Запрошено в 4K", + "seasonsAvailable": "${available}/${total} сезонов", + "nextEpisodeIn": "Серия ${episode} через ${duration}", + "nextAiringIn": "Далее через ${duration}", + "episodesShort": "${n} эп.", + "minutesPerEpisode": "${n} мин/эп.", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} в списках", + "viewersDay": "${n} посмотрели сегодня", + "viewersWeek": "${n} посмотрели на этой неделе", + "viewersMonth": "${n} посмотрели в этом месяце", + "viewersYear": "${n} посмотрели в этом году", + "viewersAllTime": "${n} зрителей", + "planning": "${n} планируют посмотреть", + "favorited": "${n} в избранном", + "dropRate": "${percent} бросили", "comments": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "${n} комментарий", + "few": "${n} комментария", + "many": "${n} комментариев", + "other": "${n} комментариев" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} голосов", + "watching": "${n} смотрят", + "completed": "${n} завершили", + "onHold": "${n} отложили", + "dropped": "${n} бросили" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Зима", + "spring": "Весна", + "summer": "Лето", + "fall": "Осень", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "ТВ", + "tvShort": "Короткометражное ТВ", + "movie": "Фильм", + "special": "Спецвыпуск", + "ova": "OVA", + "ona": "ONA", + "music": "Музыка", + "other": "Другое" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Оригинал", + "manga": "Манга", + "lightNovel": "Ранобэ", + "novel": "Новелла", + "visualNovel": "Визуальная новелла", + "game": "Игра", + "webComic": "Веб-комикс", + "musicRelease": "Музыка", + "otherMedia": "Другое" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Режиссёр", + "writer": "Сценарист", + "producer": "Продюсер", + "creator": "Создатель", + "composer": "Композитор" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Приквел", + "sequel": "Сиквел", + "sideStory": "Побочная история", + "spinOff": "Спин-офф", + "alternativeVersion": "Альтернативная версия", + "summary": "Краткое изложение", + "parentStory": "Основная история", + "adaptation": "Адаптация", + "other": "Связано" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Выходит ${day} в ${time}", + "broadcastWithZone": "Выходит ${day} в ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Оригинальное название", + "alsoKnownAs": "Также известен как", + "studios": "Студии", + "country": "Страна", + "language": "Язык", + "released": "Выпущено", + "physicalRelease": "На диске", + "ended": "Завершено", + "addedOn": "Добавлено ${date}", + "yourRating": "Ваша оценка", + "budget": "Бюджет", + "revenue": "Сборы", + "contentAdvisory": "Возрастные ограничения", + "tags": "Теги", + "revealSpoilerTags": "Показать теги со спойлерами", + "links": "Ссылки", + "watchOn": "Смотреть на", + "watchTrailer": "Смотреть трейлер", + "openOn": "Открыть на ${site}", + "crew": "Съёмочная группа", + "ratings": "Рейтинги", + "schedule": "Расписание", "recommendedByUsers": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "Рекомендуют ${n} пользователь", + "few": "Рекомендуют ${n} пользователя", + "many": "Рекомендуют ${n} пользователей", + "other": "Рекомендуют ${n} пользователей" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Рекомендовано: ${who}", + "favoritedBy": "В избранном у ${who}", + "unairedEpisodes": "${n} ещё не вышли", + "recommendedByPercent": "Рекомендуют ${percent} зрителей", + "relatedTitles": "Связанные названия", + "background": "Фон" }, "totalResults": { - "one": "", - "few": "", - "many": "", - "other": "" + "one": "${n} результат", + "few": "${n} результата", + "many": "${n} результатов", + "other": "${n} результатов" } }, "liveTv": { @@ -1519,15 +1519,15 @@ "editSyncRule": "Редактировать правило синхронизации", "removeSyncRule": "Удалить правило синхронизации", "removeSyncRuleConfirm": "Прекратить синхронизацию «${title}»? Скачанные эпизоды будут сохранены.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Прекратить синхронизацию \"${title}\"?", + "deleteSyncRuleDownloads": "Также удалить связанные загрузки", + "deleteSyncRuleDownloadsDescription": "Загрузки, используемые другим правилом синхронизации или профилем, будут сохранены.", "syncRuleCreated": "Правило синхронизации создано — хранится ${count} непросмотренных эпизодов", "syncRuleUpdated": "Правило синхронизации обновлено", "syncRuleRemoved": "Правило синхронизации удалено", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Правило синхронизации и связанные загрузки удалены", + "syncRuleCleanupBusy": "Правила синхронизации сейчас обновляются. Попробуйте снова чуть позже.", + "syncRuleCleanupUnavailable": "Не удалось надёжно определить связанные загрузки. Переподключите сервер и повторите попытку либо удалите правило без удаления загрузок.", "syncedNewEpisodes": "Синхронизировано ${count} новых эпизодов для ${title}", "activeSyncRules": "Правила синхронизации", "noSyncRules": "Нет правил синхронизации", @@ -1892,7 +1892,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Активируйте Plezy в ${service}", @@ -1925,12 +1925,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Добавить сервер ${product}", "serverUrls": "URL-адреса сервера", "serverUrlsHelper": "Можно указать несколько URL через запятую.", "findServer": "Найти сервер", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Поиск локальных серверов ${product}...", + "localMediaBrowserServers": "Локальные серверы ${product}", "username": "Имя пользователя", "password": "Пароль", "signIn": "Войти", @@ -1942,15 +1942,15 @@ "addPlexTitle": "Войти через Plex", "pinExpired": "Срок действия PIN истёк до входа. Попробуйте снова.", "failedToRegisterAccount": "Не удалось зарегистрировать учётную запись: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Введите URL вашего сервера ${product}", "addConnectionTitle": "Добавить подключение", "addConnectionTitleScoped": "Добавить в ${name}", "signInWithPlexCard": "Войти через Plex", "signInWithPlexCardSubtitle": "Авторизуйте это устройство. Общие серверы будут добавлены.", "signInWithPlexCardSubtitleScoped": "Авторизуйте аккаунт Plex. Пользователи Home станут профилями.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Подключиться к ${product}", + "connectToMediaBrowserCardSubtitle": "Введите URL сервера, имя пользователя и пароль.", + "connectToMediaBrowserCardSubtitleScoped": "Войдите на свой сервер ${product}. Будет привязано к ${name}.", "borrowFromAnotherProfile": "Использовать подключение другого профиля", "borrowFromAnotherProfileSubtitle": "Повторно используйте подключение другого профиля. Для защищённых профилей потребуется PIN." } diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index a06147fc..ae5f916e 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,7 +4,7 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 22 -/// Strings: 32743 (1488 per locale) +/// Strings: 38852 (1766 per locale) // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_az.g.dart b/lib/i18n/strings_az.g.dart index bc0ba691..7badba3e 100644 --- a/lib/i18n/strings_az.g.dart +++ b/lib/i18n/strings_az.g.dart @@ -67,6 +67,7 @@ class TranslationsAz extends Translations with BaseTranslations 'Təsdiqləmə gözlənilir...\nSəyahətçinizdən (brauzer) daxil olun.'; @override String get useBrowser => 'Səyahətçini istifadə et'; @override String get or => 'və ya'; + @override String connectToMediaBrowser({required Object product}) => '${product}-a qoşul'; @override String get useQuickConnect => 'Sürətli Qoşulmanı istifadə et'; @override String get quickConnectInstructions => 'Jellyfin-də Sürətli Qoşulmanı açın və bu kodu daxil edin.'; @override String get quickConnectWaiting => 'Təsdiq gözlənilir…'; @@ -175,6 +177,7 @@ class _Translations$common$az extends Translations$common$en { @override String get fullscreen => 'Tam ekran'; @override String get exitFullscreen => 'Tam ekrandan çıx'; @override String get pressBackAgainToExit => 'Çıxmaq üçün geri düyməsinə bir daha basın'; + @override late final _Translations$common$ratingSource$az ratingSource = _Translations$common$ratingSource$az._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$az extends Translations$settings$en { @override String get darkTheme => 'Tünd'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Kitabxana sıxlığı'; + @override String get displayScale => 'Ekran miqyası'; @override String get compact => 'Sıx'; @override String get comfortable => 'Rəhat'; @override String get tvCornerSpotlightBackdrop => 'Künc işıqlandırma fonu'; @@ -287,6 +291,11 @@ class _Translations$settings$az extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => 'Avtomatik (Tövsiyə olunan)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB yaddaş əlçatandır. ${size}MB bufer oynatmaya təsir edə bilər.'; + @override String get playbackBuffer => 'Oxutma buferi'; + @override String get playbackBufferAuto => 'Avtomatik (tövsiyə olunur)'; + @override String get playbackBufferLarge => 'Böyük'; + @override String get playbackBufferExtraLarge => 'Çox böyük'; + @override String get playbackBufferDescription => 'Qeyri-sabit əlaqələrə qarşı daha çox buferləyir. Bufer ölçüsü ilə də məhdudlaşır.'; @override String get defaultQualityTitle => 'Defolt keyfiyyət'; @override String get musicQualityTitle => 'Musiqi keyfiyyəti'; @override String get subtitleStyling => 'Altyazı tənzimləmələri'; @@ -509,29 +518,118 @@ class _Translations$fileInfo$az extends Translations$fileInfo$en { // Translations @override String get title => 'Fayl məlumatı'; + @override String get overview => 'Ümumi baxış'; @override String get video => 'Video'; @override String get audio => 'Səs'; @override String get subtitles => 'Altyazılar'; + @override String get images => 'Daxili şəkillər'; + @override String get dataStreams => 'Məlumat axınları'; + @override String get lyrics => 'Mahnı sözləri'; @override String get file => 'Fayl'; + @override String get attachments => 'Əlavələr'; + @override String get delivery => 'Çatdırılma'; + @override String versionCounter({required Object count, required Object index}) => '${count}-dən ${index} versiya'; + @override String fileCounter({required Object count, required Object index}) => '${count}-dən ${index} fayl'; + @override String get noStreams => 'Server bu fayl üçün heç bir axın bildirmədi.'; + @override String get copyPath => 'Yolu kopyala'; + @override String get pathCopied => 'Fayl yolu kopyalandı'; @override String get codec => 'Kodek'; + @override String get codecTag => 'Kodek teqi'; @override String get resolution => 'Ayırdetmə'; + @override String get codedResolution => 'Kodlanmış rezolyusiya'; @override String get bitrate => 'Bit sürəti (Bitrate)'; @override String get frameRate => 'Kadr tezliyi'; + @override String get rotation => 'Dönmə'; + @override String get comment => 'Şərh'; + @override String get audioDescription => 'Səs təsviri'; + @override String get headerCompression => 'Başlıq sıxışdırması'; + @override String get sidecarFile => 'Sidecar faylı'; + @override String get transportTimestamp => 'Transport vaxt damğası'; + @override String get displayOffset => 'Ekran ofseti'; + @override String get previewFailureCode => 'Önizləmə xəta kodu'; + @override String get previewRetries => 'Önizləmə cəhdləri'; @override String get aspectRatio => 'Tərəf nisbəti'; + @override String get pixelAspectRatio => 'Piksel aspekt nisbəti'; @override String get profile => 'Profil'; + @override String get level => 'Səviyyə'; @override String get bitDepth => 'Bit dərinliyi'; + @override String get pixelFormat => 'Piksel formatı'; @override String get colorSpace => 'Rəng sahəsi'; @override String get colorRange => 'Rəng diapazonu'; @override String get colorPrimaries => 'Əsas rənglər'; + @override String get colorTransfer => 'Rəng ötürməsi'; @override String get chromaSubsampling => 'Rəng alt-diskretləşdirməsi'; + @override String get chromaLocation => 'Chroma mövqeyi'; + @override String get scanType => 'Tarama növü'; + @override String get interlaced => 'Sətirlərarası'; + @override String get anamorphic => 'Anamorfik'; + @override String get referenceFrames => 'İstinad kadrları'; + @override String get dynamicRange => 'Dinamik diapazon'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision səviyyəsi'; + @override String get dolbyVisionVersion => 'Dolby Vision versiyası'; + @override String get dolbyVisionLayers => 'Dolby Vision təbəqələri'; + @override String get baseLayerCompatibility => 'Baza təbəqə uyğunluğu'; + @override String get avcBitstream => 'AVC bit axını'; + @override String get nalLengthSize => 'NAL uzunluq ölçüsü'; + @override String get scalingMatrix => 'Xüsusi miqyaslama matrisi'; + @override String get streamIdentifier => 'Axın identifikatoru'; + @override String get streamIndex => 'Axın indeksi'; + @override String get streamId => 'Axın ID-si'; + @override String get language => 'Dil'; + @override String get languageCode => 'Dil kodu'; + @override String get streamTitle => 'Trek başlığı'; @override String get channels => 'Kanallar'; + @override String get sampleRate => 'Diskretləşdirmə tezliyi'; + @override String get spatialAudio => 'Məkan səsi'; + @override String get textBased => 'Mətn əsaslı'; + @override String get subtitleFormat => 'Sidecar formatı'; + @override String get provider => 'Provayder'; + @override String get matchScore => 'Uyğunluq balı'; + @override String get externalDelivery => 'Ayrıca ötürülə bilər'; + @override String get sidecarPath => 'Sidecar yolu'; + @override String get sourceStream => 'Kopyalanan mənbə'; + @override String get temporary => 'Müvəqqəti'; + @override String get timeBase => 'Vaxt bazası'; @override String get overallBitrate => 'Ümumi bit sürəti'; @override String get path => 'Yol'; + @override String get fileName => 'Fayl adı'; @override String get size => 'Həcm'; + @override String get totalSize => 'Ümumi ölçü'; @override String get container => 'Konteyner'; @override String get duration => 'Müddət'; + @override String get previewThumbnails => 'Önizləmə miniatürləri'; + @override String get previewIndex => 'Önizləmə indeksi'; + @override String get packetLength => 'Paket uzunluğu'; + @override String get filePresent => 'Fayl mövcuddur'; + @override String get fileReadable => 'Server tərəfindən oxuna bilir'; + @override String get streamPath => 'Axın yolu'; @override String get optimizedForStreaming => 'Yayım üçün optimallaşdırılıb'; @override String get has64bitOffsets => '64-bit ofsetlər'; + @override String get protocol => 'Protokol'; + @override String get mediaType => 'Media növü'; + @override String get sourceKind => 'Mənbə növü'; + @override String get optimizedVersion => 'Optimallaşdırılmış versiya'; + @override String get optimizationTarget => 'Optimallaşdırma hədəfi'; + @override String get deletedAt => 'Silinib'; + @override String get remoteSource => 'Uzaq mənbə'; + @override String get infiniteStream => 'Sonsuz axın'; + @override String get directPlay => 'Birbaşa oynatma'; + @override String get directStream => 'Birbaşa axın'; + @override String get transcoding => 'Yenidən kodlaşdırma'; + @override String get etag => 'ETag'; + @override String get versionId => 'Versiya ID-si'; + @override String get fileId => 'Fayl ID-si'; + @override String get defaultAudioTrack => 'Defolt səs treki'; + @override String get defaultSubtitleTrack => 'Defolt altyazı treki'; + @override String get subtitlesOff => 'Söndürülüb'; + @override String get flagDefault => 'Defolt'; + @override String get flagForced => 'Məcburi'; + @override String get flagSelected => 'Seçilib'; + @override String get flagExternal => 'Xarici'; + @override String get flagHearingImpaired => 'Eşitmə qüsurlu üçün'; + @override String get flagDub => 'Dublyaj'; + @override String get flagOriginal => 'Orijinal'; } // Path: mediaMenu @@ -549,7 +647,35 @@ class _Translations$mediaMenu$az extends Translations$mediaMenu$en { @override String get shufflePlay => 'Qarışıq oynat'; @override String get shuffleNotAvailableOffline => 'Qarışıq oynatma oflayn rejimdə əlçatan deyil'; @override String get fileInfo => 'Fayl məlumatı'; + @override String get deleteEpisodeFromServer => 'Seriyanı serverdən sil'; + @override String get deleteSeasonFromServer => 'Mövsümü serverdən sil'; + @override String get deleteShowFromServer => 'Serialı serverdən sil'; + @override String get deleteMovieFromServer => 'Kinonu serverdən sil'; + @override String get deleteEpisodeTitle => 'Bu seriya silinsin?'; + @override String get deleteSeasonTitle => 'Bu mövsüm silinsin?'; + @override String get deleteShowTitle => 'Bu serial silinsin?'; + @override String get deleteMovieTitle => 'Bu kino silinsin?'; + @override String get deleteEpisodeConfirm => 'Seriyanı sil'; + @override String get deleteSeasonConfirm => 'Mövsümü sil'; + @override String get deleteShowConfirm => 'Serialı sil'; + @override String get deleteMovieConfirm => 'Kinonu sil'; + @override String get deleteAnyway => 'Yenə də sil'; + @override String confirmDeleteTarget({required Object title}) => '${title} serverinizdən birdəfəlik silinsin?'; @override String get deleteMultipleWarning => 'Bu bütün seriyaları və faylları əhatə edir.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, + one: 'Bu, içindəki ${n} seriyanı və onun faylını siləcək.', + other: 'Bu, içindəki ${n} seriyanı və onların fayllarını siləcək.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, + one: 'Bu element ${n} fayl kimi saxlanılır və o silinəcək.', + other: 'Bu element ${n} faylda saxlanılır və hamısı silinəcək.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, + one: 'Eyni faylda saxlanılan ${n} başqa seriya da silinəcək:', + other: 'Eyni faylda saxlanılan ${n} başqa seriya da silinəcək:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy bunun hansı faylları siləcəyini yoxlaya bilmədi, ona görə də yuxarıda adı çəkilən elementdən daha çoxunu silə bilər. Ləğv edib təzədən cəhd edin və ya yenə də silin.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Serveriniz bu element üçün fayl təfərrüatlarını təqdim etmədi, ona görə Plezy bunun hansı faylları siləcəyini yoxlaya bilmir. Yuxarıda adı çəkilən elementdən daha çoxunu silə bilər.'; @override String get mediaDeletedSuccessfully => 'Media elementi uğurla silindi'; @override String get mediaFailedToDelete => 'Media elementi silinə bilmədi'; @override String get rate => 'Qiymətləndir'; @@ -660,6 +786,9 @@ class _Translations$videoControls$az extends Translations$videoControls$en { @override String get playNext => 'Növbətini oynat'; @override String get playButton => 'Oynat'; @override String get pauseButton => 'Fasilə'; + @override String get playbackPaused => 'Fasilədə'; + @override String get playbackResumed => 'Oynadılır'; + @override String get loadingVideo => 'Video yüklənir'; @override String get showPlaybackControls => 'Oynatma idarəetmələrini göstər'; @override String get hidePlaybackControls => 'Oynatma idarəetmələrini gizlət'; @override String seekBackwardButton({required Object seconds}) => '${seconds} saniyə geri sar'; @@ -768,6 +897,8 @@ class _Translations$messages$az extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Uyğun oynadıcıya keçilir...'; @override String get serverLimitTitle => 'Oynatma uğursuz oldu'; @override String get serverLimitBody => 'Server xətası (HTTP 500). Məhdudiyyət bu seansı rədd etdi.'; + @override String get mediaUnreadableTitle => 'Fayl əlçatan deyil'; + @override String get mediaUnreadableBody => 'Server bu elementi tapdı, lakin onun faylını oxuya bilmədi (HTTP 404). Fayl yəqin ki, köçürülüb, silinib və ya onun saxlanma yeri oflayndır. Server sahibindən faylı yoxlamasını və kitabxananı yenidən skan etməsini xahiş edin.'; @override String get logsUploaded => 'Jurnallar yükləndi'; @override String get logsUploadFailed => 'Jurnallar yüklənə bilmədi'; @override String get logId => 'Jurnal ID-si'; @@ -921,6 +1052,8 @@ class _Translations$connections$az extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => '${name} üçün seansın vaxtı bitdi'; @override String sessionExpiredMany({required Object count}) => '${count} server üçün seansın vaxtı bitdi'; @override String get signInAgain => 'Yenidən daxil ol'; + @override String editMediaBrowserTitle({required Object product}) => '${product} qoşulmasını düzəliş et'; + @override String editMediaBrowserIntro({required Object serverName}) => '${serverName} üçün URL-lər əlavə edin və ya silin. Plezy əlçatan olan ən aşağı gecikməli URL-i istifadə edəcək.'; } // Path: discover @@ -1082,6 +1215,45 @@ class _Translations$logs$az extends Translations$logs$en { @override String get uploadLogs => 'Jurnalları yüklə'; } +// Path: startup +class _Translations$startup$az extends Translations$startup$en { + _Translations$startup$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy başlaya bilmədi'; + @override String get failedBody => 'Başlatma zamanı nəsə səhv getdi. Aşağıdakı təfərrüatlar nəyin uğursuz olduğunu göstərir.'; + @override String get failedBodyRepairable => 'Plezy-nin saxlanmış tənzimləmə faylı zədələnib və Plezy başlamazdan əvvəl yenidən qurulmalıdır. Təzədən cəhd etmək kömək etməyəcək — Yaddaşı təmir et seçin.'; + @override String get phaseLabel => 'Addım'; + @override String get showDetails => 'Təfərrüatları göstər'; + @override String get hideDetails => 'Təfərrüatları gizlət'; + @override String get copyDetails => 'Təfərrüatları kopyala'; + @override String get detailsCopied => 'Təfərrüatlar buferə kopyalandı'; + @override String get uploadDetails => 'Təfərrüatları yüklə'; + @override String get repairStorage => 'Yaddaşı təmir et'; + @override String get repairTitle => 'Saxlanmış məlumatlar təmir edilsin?'; + @override String get repairBodyCommon => 'Plezy-nin tənzimləmə faylı zədələnib və oxuna bilmir. Təmir bütün tənzimləmələri defolt vəziyyətinə sıfırlayır.'; + @override String get repairBodyOneCredential => 'Bir saxlanmış daxil olma məlumatı zədələnib və oxuna bilmir. Təmir yalnız onu silir; digər tənzimləmələrinizə toxunulmur.'; + @override String get repairBodySignInsKept => 'Serverləriniz və profilləriniz daxil olmuş vəziyyətdə qalmalıdır.'; + @override String get repairBodySignInsLost => 'Saxlanmış daxil olmalarınızı qoruyan açar bu fayldan bərpa edilə bilmir, ona görə də hər serverə və profilə yenidən daxil olmalı olacaqsınız. Media serverinizdə heç nəyə təsir olunmur.'; + @override String get repairBodySessionsUncertain => 'İzləyicilər (MAL, AniList, Simkl, Trakt) və Seerr ayrıca saxlanılır və qalıb-qalmayacaqları bəlli deyil. Plezy sizə nəyi saxladığını dəqiq bildirəcək.'; + @override String get repairConfirm => 'Təmir et'; + @override String get repairSucceeded => 'Yaddaş təmir edildi'; + @override String get repairNeedsRestart => 'Yaddaş təmir edildi — yenidən başlatma tələb olunur'; + @override String get restartRequiredBody => 'Məlumatlarınız təmir edildi, lakin Plezy ondan istifadə etmək üçün yenidən başlamalıdır. Plezy-ni bağlayın və yenidən açın.'; + @override String get quitPlezy => 'Plezy-dən çıx'; + @override String get repairFailed => 'Təmir uğursuz oldu'; + @override String get repairKeptSignIns => 'Serverləriniz və profilləriniz hələ də daxil olub.'; + @override String get repairLostSignIns => 'Saxlanmış daxil olmalarınızı qoruyan açar bərpa edilə bilmədi. Hər serverə və profilə yenidən daxil olmalı olacaqsınız.'; + @override String get repairLostSessions => 'Ən azı bir izləyici və ya Seerr əlaqəsi itirildi və yenidən qoşulmalıdır.'; + @override String get backupTitle => 'Zədələnmiş faylın nüsxəsi saxlanıldı'; + @override String get backupWarning => 'O, daxil olma məlumatlarınızı ehtiva edir. Onu yükləməyin və ya paylaşmayın.'; + @override String get deleteBackup => 'Nüsxəni sil'; + @override String get backupDeleted => 'Nüsxə silindi.'; + @override String get previousFailureTitle => 'Plezy son dəfə başlaya bilmədi'; +} + // Path: licenses class _Translations$licenses$az extends Translations$licenses$en { _Translations$licenses$az._(TranslationsAz root) : this._root = root, super.internal(root); @@ -1137,6 +1309,20 @@ class _Translations$explore$az extends Translations$explore$en { @override String searchEmpty({required Object query}) => '"${query}" üçün nəticə tapılmadı'; @override String searchPrompt({required Object source}) => '${source} vasitəsilə kino və seriallar axtarın.'; @override String get searchFailed => 'Axtarış uğursuz oldu. Bağlantınızı yoxlayın.'; + @override late final _Translations$explore$badge$az badge = _Translations$explore$badge$az._(_root); + @override late final _Translations$explore$stats$az stats = _Translations$explore$stats$az._(_root); + @override late final _Translations$explore$season$az season = _Translations$explore$season$az._(_root); + @override late final _Translations$explore$format$az format = _Translations$explore$format$az._(_root); + @override late final _Translations$explore$sourceMaterial$az sourceMaterial = _Translations$explore$sourceMaterial$az._(_root); + @override late final _Translations$explore$creditRole$az creditRole = _Translations$explore$creditRole$az._(_root); + @override late final _Translations$explore$relation$az relation = _Translations$explore$relation$az._(_root); + @override String broadcast({required Object day, required Object time}) => '${day} saat ${time}-da yayımlanır'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '${day} saat ${time} (${timezone}) yayımlanır'; + @override late final _Translations$explore$detail$az detail = _Translations$explore$detail$az._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, + one: '${n} nəticə', + other: '${n} nəticə', + ); } // Path: liveTv @@ -1810,9 +1996,12 @@ class _Translations$addServer$az extends Translations$addServer$en { final TranslationsAz _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product} serveri əlavə et'; @override String get serverUrls => 'Server URL-ləri'; @override String get serverUrlsHelper => 'Vergüllə ayrılmış bir neçə URL-ə icazə verilir.'; @override String get findServer => 'Server tap'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Yerli ${product} serverləri axtarılır...'; + @override String localMediaBrowserServers({required Object product}) => 'Yerli ${product} serverləri'; @override String get username => 'İstifadəçi adı'; @override String get password => 'Şifrə'; @override String get signIn => 'Daxil ol'; @@ -1824,15 +2013,39 @@ class _Translations$addServer$az extends Translations$addServer$en { @override String get addPlexTitle => 'Plex ilə daxil ol'; @override String get pinExpired => 'PIN-in vaxtı bitdi. Lütfən təzədən cəhd edin.'; @override String failedToRegisterAccount({required Object error}) => 'Hesab qeydiyyatı uğursuz oldu: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '${product} server URL-inizi daxil edin'; @override String get addConnectionTitle => 'Qoşulma əlavə et'; @override String addConnectionTitleScoped({required Object name}) => '${name} profilinə əlavə et'; @override String get signInWithPlexCard => 'Plex ilə daxil ol'; @override String get signInWithPlexCardSubtitle => 'Bu cihazı səlahiyyətləndirin.'; @override String get signInWithPlexCardSubtitleScoped => 'Plex hesabını səlahiyyətləndirin.'; + @override String connectToMediaBrowserCard({required Object product}) => '${product}-a qoşul'; + @override String get connectToMediaBrowserCardSubtitle => 'Server URL-inizi, istifadəçi adınızı və şifrənizi daxil edin.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '${product} serverinizə daxil olun. ${name} ilə əlaqələndirilir.'; @override String get borrowFromAnotherProfile => 'Başqa profildən götür'; @override String get borrowFromAnotherProfileSubtitle => 'Başqa profilin qoşulmasını yenidən istifadə edin.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$az extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get critic => 'Tənqidçilər'; + @override String get audience => 'Tamaşaçılar'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes tənqidçiləri'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes tamaşaçıları'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$az extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$az._(TranslationsAz root) : this._root = root, super.internal(root); @@ -1996,6 +2209,186 @@ class _Translations$explore$status$az extends Translations$explore$status$en { @override String get upcoming => 'Gələcək'; } +// Path: explore.badge +class _Translations$explore$badge$az extends Translations$explore$badge$en { + _Translations$explore$badge$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} populyar'; + @override String rankAiring({required Object n}) => '#${n} yayımlanır'; + @override String rankRated({required Object n}) => '#${n} qiymətləndirilib'; + @override String rankFavorited({required Object n}) => '#${n} favorit'; + @override String rankTrending({required Object n}) => '#${n} trenddə'; + @override String rankSeasonal({required Object season, required Object n}) => '${season} üçün #${n}'; + @override String watchingNow({required Object n}) => '${n} izləyir'; + @override String get available => 'Əlçatandır'; + @override String get partiallyAvailable => 'Hissəvi əlçatandır'; + @override String get availableIn4k => '4K əlçatandır'; + @override String get requested => 'Sorğu göndərildi'; + @override String get pendingApproval => 'Təsdiq gözlənilir'; + @override String get processing => 'Emal edilir'; + @override String get declined => 'Rədd edildi'; + @override String get requestFailed => 'Sorğu uğursuz oldu'; + @override String get requested4k => '4K sorğu göndərildi'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} mövsüm'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Ep ${episode} ${duration} sonra'; + @override String nextAiringIn({required Object duration}) => 'Növbəti ${duration} sonra'; + @override String episodesShort({required Object n}) => '${n} ep'; + @override String minutesPerEpisode({required Object n}) => '${n} dəq/ep'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$az extends Translations$explore$stats$en { + _Translations$explore$stats$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} siyahıya alınıb'; + @override String viewersDay({required Object n}) => 'Bu gün ${n} izlədi'; + @override String viewersWeek({required Object n}) => 'Bu həftə ${n} izlədi'; + @override String viewersMonth({required Object n}) => 'Bu ay ${n} izlədi'; + @override String viewersYear({required Object n}) => 'Bu il ${n} izlədi'; + @override String viewersAllTime({required Object n}) => '${n} izləyici'; + @override String planning({required Object n}) => '${n} izləməyi planlaşdırır'; + @override String favorited({required Object n}) => '${n} favorit'; + @override String dropRate({required Object percent}) => '${percent} izləməyi dayandırdı'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, + one: '${n} şərh', + other: '${n} şərh', + ); + @override String votes({required Object n}) => '${n} səs'; + @override String watching({required Object n}) => '${n} izləyir'; + @override String completed({required Object n}) => '${n} tamamladı'; + @override String onHold({required Object n}) => '${n} fasilədə'; + @override String dropped({required Object n}) => '${n} izləməyi dayandırdı'; +} + +// Path: explore.season +class _Translations$explore$season$az extends Translations$explore$season$en { + _Translations$explore$season$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get winter => 'Qış'; + @override String get spring => 'Yaz'; + @override String get summer => 'Yay'; + @override String get fall => 'Payız'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$az extends Translations$explore$format$en { + _Translations$explore$format$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'Qısa TV'; + @override String get movie => 'Kino'; + @override String get special => 'Xüsusi buraxılış'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musiqi'; + @override String get other => 'Digər'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$az extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get original => 'Orijinal'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Vizual roman'; + @override String get game => 'Oyun'; + @override String get webComic => 'Veb komiks'; + @override String get musicRelease => 'Musiqi'; + @override String get otherMedia => 'Digər'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$az extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get director => 'Rejissor'; + @override String get writer => 'Ssenarist'; + @override String get producer => 'Prodüser'; + @override String get creator => 'Yaradıcı'; + @override String get composer => 'Bəstəkar'; +} + +// Path: explore.relation +class _Translations$explore$relation$az extends Translations$explore$relation$en { + _Translations$explore$relation$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prikvel'; + @override String get sequel => 'Sikvel'; + @override String get sideStory => 'Yan hekayə'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternativ versiya'; + @override String get summary => 'Xülasə'; + @override String get parentStory => 'Əsas hekayə'; + @override String get adaptation => 'Adaptasiya'; + @override String get other => 'Əlaqəli'; +} + +// Path: explore.detail +class _Translations$explore$detail$az extends Translations$explore$detail$en { + _Translations$explore$detail$az._(TranslationsAz root) : this._root = root, super.internal(root); + + final TranslationsAz _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Orijinal başlıq'; + @override String get alsoKnownAs => 'Digər adları'; + @override String get studios => 'Studiyalar'; + @override String get country => 'Ölkə'; + @override String get language => 'Dil'; + @override String get released => 'Buraxılıb'; + @override String get physicalRelease => 'Diskdə'; + @override String get ended => 'Bitib'; + @override String addedOn({required Object date}) => '${date} əlavə edildi'; + @override String get yourRating => 'Sizin qiymətləndirməniz'; + @override String get budget => 'Büdcə'; + @override String get revenue => 'Kassa gəliri'; + @override String get contentAdvisory => 'Yaş tövsiyəsi'; + @override String get tags => 'Teqlər'; + @override String get revealSpoilerTags => 'Spoyler teqlərini göstər'; + @override String get links => 'Keçidlər'; + @override String get watchOn => 'İzlə'; + @override String get watchTrailer => 'Treyleri izlə'; + @override String openOn({required Object site}) => '${site} saytında aç'; + @override String get crew => 'Heyət'; + @override String get ratings => 'Reytinq'; + @override String get schedule => 'Cədvəl'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, + one: '${n} istifadəçi tövsiyə edir', + other: '${n} istifadəçi tövsiyə edir', + ); + @override String recommendedBy({required Object who}) => '${who} tövsiyə edir'; + @override String favoritedBy({required Object who}) => '${who} favorit edib'; + @override String unairedEpisodes({required Object n}) => '${n} hələ yayımlanmayıb'; + @override String recommendedByPercent({required Object percent}) => 'İzləyicilərin ${percent}-i tövsiyə edir'; + @override String get relatedTitles => 'Əlaqəli başlıqlar'; + @override String get background => 'Arxa fon'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$az extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$az._(TranslationsAz root) : this._root = root, super.internal(root); @@ -2139,6 +2532,7 @@ class _Translations$services$names$az extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2208,6 +2602,7 @@ extension on TranslationsAz { 'auth.waitingForAuth' => 'Təsdiqləmə gözlənilir...\nSəyahətçinizdən (brauzer) daxil olun.', 'auth.useBrowser' => 'Səyahətçini istifadə et', 'auth.or' => 'və ya', + 'auth.connectToMediaBrowser' => ({required Object product}) => '${product}-a qoşul', 'auth.useQuickConnect' => 'Sürətli Qoşulmanı istifadə et', 'auth.quickConnectInstructions' => 'Jellyfin-də Sürətli Qoşulmanı açın və bu kodu daxil edin.', 'auth.quickConnectWaiting' => 'Təsdiq gözlənilir…', @@ -2259,6 +2654,17 @@ extension on TranslationsAz { 'common.fullscreen' => 'Tam ekran', 'common.exitFullscreen' => 'Tam ekrandan çıx', 'common.pressBackAgainToExit' => 'Çıxmaq üçün geri düyməsinə bir daha basın', + 'common.ratingSource.critic' => 'Tənqidçilər', + 'common.ratingSource.audience' => 'Tamaşaçılar', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes tənqidçiləri', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes tamaşaçıları', 'screens.licenses' => 'Lisenziyalar', 'screens.switchProfile' => 'Profili dəyiş', 'screens.subtitleStyling' => 'Altyazı tənzimləmələri', @@ -2295,6 +2701,7 @@ extension on TranslationsAz { 'settings.darkTheme' => 'Tünd', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Kitabxana sıxlığı', + 'settings.displayScale' => 'Ekran miqyası', 'settings.compact' => 'Sıx', 'settings.comfortable' => 'Rəhat', 'settings.tvCornerSpotlightBackdrop' => 'Künc işıqlandırma fonu', @@ -2344,6 +2751,11 @@ extension on TranslationsAz { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => 'Avtomatik (Tövsiyə olunan)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB yaddaş əlçatandır. ${size}MB bufer oynatmaya təsir edə bilər.', + 'settings.playbackBuffer' => 'Oxutma buferi', + 'settings.playbackBufferAuto' => 'Avtomatik (tövsiyə olunur)', + 'settings.playbackBufferLarge' => 'Böyük', + 'settings.playbackBufferExtraLarge' => 'Çox böyük', + 'settings.playbackBufferDescription' => 'Qeyri-sabit əlaqələrə qarşı daha çox buferləyir. Bufer ölçüsü ilə də məhdudlaşır.', 'settings.defaultQualityTitle' => 'Defolt keyfiyyət', 'settings.musicQualityTitle' => 'Musiqi keyfiyyəti', 'settings.subtitleStyling' => 'Altyazı tənzimləmələri', @@ -2563,29 +2975,118 @@ extension on TranslationsAz { 'hotkeys.actions.skipMarker' => 'Girişi/Titrləri ötür', 'hotkeys.actions.screenshot' => 'Ekran şəkli çək', 'fileInfo.title' => 'Fayl məlumatı', + 'fileInfo.overview' => 'Ümumi baxış', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Səs', 'fileInfo.subtitles' => 'Altyazılar', + 'fileInfo.images' => 'Daxili şəkillər', + 'fileInfo.dataStreams' => 'Məlumat axınları', + 'fileInfo.lyrics' => 'Mahnı sözləri', 'fileInfo.file' => 'Fayl', + 'fileInfo.attachments' => 'Əlavələr', + 'fileInfo.delivery' => 'Çatdırılma', + 'fileInfo.versionCounter' => ({required Object count, required Object index}) => '${count}-dən ${index} versiya', + 'fileInfo.fileCounter' => ({required Object count, required Object index}) => '${count}-dən ${index} fayl', + 'fileInfo.noStreams' => 'Server bu fayl üçün heç bir axın bildirmədi.', + 'fileInfo.copyPath' => 'Yolu kopyala', + 'fileInfo.pathCopied' => 'Fayl yolu kopyalandı', 'fileInfo.codec' => 'Kodek', + 'fileInfo.codecTag' => 'Kodek teqi', 'fileInfo.resolution' => 'Ayırdetmə', + 'fileInfo.codedResolution' => 'Kodlanmış rezolyusiya', 'fileInfo.bitrate' => 'Bit sürəti (Bitrate)', 'fileInfo.frameRate' => 'Kadr tezliyi', + 'fileInfo.rotation' => 'Dönmə', + 'fileInfo.comment' => 'Şərh', + 'fileInfo.audioDescription' => 'Səs təsviri', + 'fileInfo.headerCompression' => 'Başlıq sıxışdırması', + 'fileInfo.sidecarFile' => 'Sidecar faylı', + 'fileInfo.transportTimestamp' => 'Transport vaxt damğası', + 'fileInfo.displayOffset' => 'Ekran ofseti', + 'fileInfo.previewFailureCode' => 'Önizləmə xəta kodu', + 'fileInfo.previewRetries' => 'Önizləmə cəhdləri', 'fileInfo.aspectRatio' => 'Tərəf nisbəti', + 'fileInfo.pixelAspectRatio' => 'Piksel aspekt nisbəti', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Səviyyə', 'fileInfo.bitDepth' => 'Bit dərinliyi', + 'fileInfo.pixelFormat' => 'Piksel formatı', 'fileInfo.colorSpace' => 'Rəng sahəsi', 'fileInfo.colorRange' => 'Rəng diapazonu', 'fileInfo.colorPrimaries' => 'Əsas rənglər', + 'fileInfo.colorTransfer' => 'Rəng ötürməsi', 'fileInfo.chromaSubsampling' => 'Rəng alt-diskretləşdirməsi', + 'fileInfo.chromaLocation' => 'Chroma mövqeyi', + 'fileInfo.scanType' => 'Tarama növü', + 'fileInfo.interlaced' => 'Sətirlərarası', + 'fileInfo.anamorphic' => 'Anamorfik', + 'fileInfo.referenceFrames' => 'İstinad kadrları', + 'fileInfo.dynamicRange' => 'Dinamik diapazon', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision səviyyəsi', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision versiyası', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision təbəqələri', + 'fileInfo.baseLayerCompatibility' => 'Baza təbəqə uyğunluğu', + 'fileInfo.avcBitstream' => 'AVC bit axını', + 'fileInfo.nalLengthSize' => 'NAL uzunluq ölçüsü', + 'fileInfo.scalingMatrix' => 'Xüsusi miqyaslama matrisi', + 'fileInfo.streamIdentifier' => 'Axın identifikatoru', + 'fileInfo.streamIndex' => 'Axın indeksi', + 'fileInfo.streamId' => 'Axın ID-si', + 'fileInfo.language' => 'Dil', + 'fileInfo.languageCode' => 'Dil kodu', + 'fileInfo.streamTitle' => 'Trek başlığı', 'fileInfo.channels' => 'Kanallar', + 'fileInfo.sampleRate' => 'Diskretləşdirmə tezliyi', + 'fileInfo.spatialAudio' => 'Məkan səsi', + 'fileInfo.textBased' => 'Mətn əsaslı', + 'fileInfo.subtitleFormat' => 'Sidecar formatı', + 'fileInfo.provider' => 'Provayder', + 'fileInfo.matchScore' => 'Uyğunluq balı', + 'fileInfo.externalDelivery' => 'Ayrıca ötürülə bilər', + 'fileInfo.sidecarPath' => 'Sidecar yolu', + 'fileInfo.sourceStream' => 'Kopyalanan mənbə', + 'fileInfo.temporary' => 'Müvəqqəti', + 'fileInfo.timeBase' => 'Vaxt bazası', 'fileInfo.overallBitrate' => 'Ümumi bit sürəti', 'fileInfo.path' => 'Yol', + 'fileInfo.fileName' => 'Fayl adı', 'fileInfo.size' => 'Həcm', + 'fileInfo.totalSize' => 'Ümumi ölçü', 'fileInfo.container' => 'Konteyner', 'fileInfo.duration' => 'Müddət', + 'fileInfo.previewThumbnails' => 'Önizləmə miniatürləri', + 'fileInfo.previewIndex' => 'Önizləmə indeksi', + 'fileInfo.packetLength' => 'Paket uzunluğu', + 'fileInfo.filePresent' => 'Fayl mövcuddur', + 'fileInfo.fileReadable' => 'Server tərəfindən oxuna bilir', + 'fileInfo.streamPath' => 'Axın yolu', 'fileInfo.optimizedForStreaming' => 'Yayım üçün optimallaşdırılıb', 'fileInfo.has64bitOffsets' => '64-bit ofsetlər', + 'fileInfo.protocol' => 'Protokol', + 'fileInfo.mediaType' => 'Media növü', + 'fileInfo.sourceKind' => 'Mənbə növü', + 'fileInfo.optimizedVersion' => 'Optimallaşdırılmış versiya', + 'fileInfo.optimizationTarget' => 'Optimallaşdırma hədəfi', + 'fileInfo.deletedAt' => 'Silinib', + 'fileInfo.remoteSource' => 'Uzaq mənbə', + 'fileInfo.infiniteStream' => 'Sonsuz axın', + 'fileInfo.directPlay' => 'Birbaşa oynatma', + 'fileInfo.directStream' => 'Birbaşa axın', + 'fileInfo.transcoding' => 'Yenidən kodlaşdırma', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Versiya ID-si', + 'fileInfo.fileId' => 'Fayl ID-si', + 'fileInfo.defaultAudioTrack' => 'Defolt səs treki', + 'fileInfo.defaultSubtitleTrack' => 'Defolt altyazı treki', + 'fileInfo.subtitlesOff' => 'Söndürülüb', + 'fileInfo.flagDefault' => 'Defolt', + 'fileInfo.flagForced' => 'Məcburi', + 'fileInfo.flagSelected' => 'Seçilib', + 'fileInfo.flagExternal' => 'Xarici', + 'fileInfo.flagHearingImpaired' => 'Eşitmə qüsurlu üçün', + 'fileInfo.flagDub' => 'Dublyaj', + 'fileInfo.flagOriginal' => 'Orijinal', 'mediaMenu.markAsWatched' => 'Baxıldı olaraq işarələ', 'mediaMenu.markAsUnwatched' => 'Baxılmadı olaraq işarələ', 'mediaMenu.removeFromContinueWatching' => 'İzləməyə davam et-dən sil', @@ -2594,7 +3095,28 @@ extension on TranslationsAz { 'mediaMenu.shufflePlay' => 'Qarışıq oynat', 'mediaMenu.shuffleNotAvailableOffline' => 'Qarışıq oynatma oflayn rejimdə əlçatan deyil', 'mediaMenu.fileInfo' => 'Fayl məlumatı', + 'mediaMenu.deleteEpisodeFromServer' => 'Seriyanı serverdən sil', + 'mediaMenu.deleteSeasonFromServer' => 'Mövsümü serverdən sil', + 'mediaMenu.deleteShowFromServer' => 'Serialı serverdən sil', + 'mediaMenu.deleteMovieFromServer' => 'Kinonu serverdən sil', + 'mediaMenu.deleteEpisodeTitle' => 'Bu seriya silinsin?', + 'mediaMenu.deleteSeasonTitle' => 'Bu mövsüm silinsin?', + 'mediaMenu.deleteShowTitle' => 'Bu serial silinsin?', + 'mediaMenu.deleteMovieTitle' => 'Bu kino silinsin?', + 'mediaMenu.deleteEpisodeConfirm' => 'Seriyanı sil', + 'mediaMenu.deleteSeasonConfirm' => 'Mövsümü sil', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Serialı sil', + 'mediaMenu.deleteMovieConfirm' => 'Kinonu sil', + 'mediaMenu.deleteAnyway' => 'Yenə də sil', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '${title} serverinizdən birdəfəlik silinsin?', 'mediaMenu.deleteMultipleWarning' => 'Bu bütün seriyaları və faylları əhatə edir.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, one: 'Bu, içindəki ${n} seriyanı və onun faylını siləcək.', other: 'Bu, içindəki ${n} seriyanı və onların fayllarını siləcək.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, one: 'Bu element ${n} fayl kimi saxlanılır və o silinəcək.', other: 'Bu element ${n} faylda saxlanılır və hamısı silinəcək.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, one: 'Eyni faylda saxlanılan ${n} başqa seriya da silinəcək:', other: 'Eyni faylda saxlanılan ${n} başqa seriya da silinəcək:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy bunun hansı faylları siləcəyini yoxlaya bilmədi, ona görə də yuxarıda adı çəkilən elementdən daha çoxunu silə bilər. Ləğv edib təzədən cəhd edin və ya yenə də silin.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Serveriniz bu element üçün fayl təfərrüatlarını təqdim etmədi, ona görə Plezy bunun hansı faylları siləcəyini yoxlaya bilmir. Yuxarıda adı çəkilən elementdən daha çoxunu silə bilər.', 'mediaMenu.mediaDeletedSuccessfully' => 'Media elementi uğurla silindi', 'mediaMenu.mediaFailedToDelete' => 'Media elementi silinə bilmədi', 'mediaMenu.rate' => 'Qiymətləndir', @@ -2660,6 +3182,9 @@ extension on TranslationsAz { 'videoControls.playNext' => 'Növbətini oynat', 'videoControls.playButton' => 'Oynat', 'videoControls.pauseButton' => 'Fasilə', + 'videoControls.playbackPaused' => 'Fasilədə', + 'videoControls.playbackResumed' => 'Oynadılır', + 'videoControls.loadingVideo' => 'Video yüklənir', 'videoControls.showPlaybackControls' => 'Oynatma idarəetmələrini göstər', 'videoControls.hidePlaybackControls' => 'Oynatma idarəetmələrini gizlət', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} saniyə geri sar', @@ -2711,8 +3236,6 @@ extension on TranslationsAz { 'videoControls.searchSubtitles' => 'Altyazı axtar', 'videoControls.language' => 'Dil', 'videoControls.noSubtitlesFound' => 'Altyazı tapılmadı', - _ => null, - } ?? switch (path) { 'videoControls.subtitleDownloaded' => 'Altyazı yükləndi', 'videoControls.subtitleDownloadedNotApplied' => 'Altyazı yükləndi, lakin seçilə bilmədi', 'videoControls.subtitleDownloadFailed' => 'Altyazı yüklənə bilmədi', @@ -2764,6 +3287,8 @@ extension on TranslationsAz { 'messages.switchingToCompatiblePlayer' => 'Uyğun oynadıcıya keçilir...', 'messages.serverLimitTitle' => 'Oynatma uğursuz oldu', 'messages.serverLimitBody' => 'Server xətası (HTTP 500). Məhdudiyyət bu seansı rədd etdi.', + 'messages.mediaUnreadableTitle' => 'Fayl əlçatan deyil', + 'messages.mediaUnreadableBody' => 'Server bu elementi tapdı, lakin onun faylını oxuya bilmədi (HTTP 404). Fayl yəqin ki, köçürülüb, silinib və ya onun saxlanma yeri oflayndır. Server sahibindən faylı yoxlamasını və kitabxananı yenidən skan etməsini xahiş edin.', 'messages.logsUploaded' => 'Jurnallar yükləndi', 'messages.logsUploadFailed' => 'Jurnallar yüklənə bilmədi', 'messages.logId' => 'Jurnal ID-si', @@ -2872,6 +3397,8 @@ extension on TranslationsAz { 'connections.sessionExpiredOne' => ({required Object name}) => '${name} üçün seansın vaxtı bitdi', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} server üçün seansın vaxtı bitdi', 'connections.signInAgain' => 'Yenidən daxil ol', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '${product} qoşulmasını düzəliş et', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '${serverName} üçün URL-lər əlavə edin və ya silin. Plezy əlçatan olan ən aşağı gecikməli URL-i istifadə edəcək.', 'discover.title' => 'Kəşf et', 'discover.noContentAvailable' => 'Məzmun əlçatan deyil', 'discover.addMediaToLibraries' => 'Kitabxanalarınıza bir az media əlavə edin', @@ -3005,6 +3532,36 @@ extension on TranslationsAz { 'logs.clearLogs' => 'Jurnalları təmizlə', 'logs.copyLogs' => 'Jurnalları kopyala', 'logs.uploadLogs' => 'Jurnalları yüklə', + 'startup.failedTitle' => 'Plezy başlaya bilmədi', + 'startup.failedBody' => 'Başlatma zamanı nəsə səhv getdi. Aşağıdakı təfərrüatlar nəyin uğursuz olduğunu göstərir.', + 'startup.failedBodyRepairable' => 'Plezy-nin saxlanmış tənzimləmə faylı zədələnib və Plezy başlamazdan əvvəl yenidən qurulmalıdır. Təzədən cəhd etmək kömək etməyəcək — Yaddaşı təmir et seçin.', + 'startup.phaseLabel' => 'Addım', + 'startup.showDetails' => 'Təfərrüatları göstər', + 'startup.hideDetails' => 'Təfərrüatları gizlət', + 'startup.copyDetails' => 'Təfərrüatları kopyala', + 'startup.detailsCopied' => 'Təfərrüatlar buferə kopyalandı', + 'startup.uploadDetails' => 'Təfərrüatları yüklə', + 'startup.repairStorage' => 'Yaddaşı təmir et', + 'startup.repairTitle' => 'Saxlanmış məlumatlar təmir edilsin?', + 'startup.repairBodyCommon' => 'Plezy-nin tənzimləmə faylı zədələnib və oxuna bilmir. Təmir bütün tənzimləmələri defolt vəziyyətinə sıfırlayır.', + 'startup.repairBodyOneCredential' => 'Bir saxlanmış daxil olma məlumatı zədələnib və oxuna bilmir. Təmir yalnız onu silir; digər tənzimləmələrinizə toxunulmur.', + 'startup.repairBodySignInsKept' => 'Serverləriniz və profilləriniz daxil olmuş vəziyyətdə qalmalıdır.', + 'startup.repairBodySignInsLost' => 'Saxlanmış daxil olmalarınızı qoruyan açar bu fayldan bərpa edilə bilmir, ona görə də hər serverə və profilə yenidən daxil olmalı olacaqsınız. Media serverinizdə heç nəyə təsir olunmur.', + 'startup.repairBodySessionsUncertain' => 'İzləyicilər (MAL, AniList, Simkl, Trakt) və Seerr ayrıca saxlanılır və qalıb-qalmayacaqları bəlli deyil. Plezy sizə nəyi saxladığını dəqiq bildirəcək.', + 'startup.repairConfirm' => 'Təmir et', + 'startup.repairSucceeded' => 'Yaddaş təmir edildi', + 'startup.repairNeedsRestart' => 'Yaddaş təmir edildi — yenidən başlatma tələb olunur', + 'startup.restartRequiredBody' => 'Məlumatlarınız təmir edildi, lakin Plezy ondan istifadə etmək üçün yenidən başlamalıdır. Plezy-ni bağlayın və yenidən açın.', + 'startup.quitPlezy' => 'Plezy-dən çıx', + 'startup.repairFailed' => 'Təmir uğursuz oldu', + 'startup.repairKeptSignIns' => 'Serverləriniz və profilləriniz hələ də daxil olub.', + 'startup.repairLostSignIns' => 'Saxlanmış daxil olmalarınızı qoruyan açar bərpa edilə bilmədi. Hər serverə və profilə yenidən daxil olmalı olacaqsınız.', + 'startup.repairLostSessions' => 'Ən azı bir izləyici və ya Seerr əlaqəsi itirildi və yenidən qoşulmalıdır.', + 'startup.backupTitle' => 'Zədələnmiş faylın nüsxəsi saxlanıldı', + 'startup.backupWarning' => 'O, daxil olma məlumatlarınızı ehtiva edir. Onu yükləməyin və ya paylaşmayın.', + 'startup.deleteBackup' => 'Nüsxəni sil', + 'startup.backupDeleted' => 'Nüsxə silindi.', + 'startup.previousFailureTitle' => 'Plezy son dəfə başlaya bilmədi', 'licenses.relatedPackages' => 'Əlaqəli paketlər', 'licenses.license' => 'Lisenziya', 'licenses.licenseNumber' => ({required Object number}) => 'Lisenziya ${number}', @@ -3048,6 +3605,113 @@ extension on TranslationsAz { 'explore.searchEmpty' => ({required Object query}) => '"${query}" üçün nəticə tapılmadı', 'explore.searchPrompt' => ({required Object source}) => '${source} vasitəsilə kino və seriallar axtarın.', 'explore.searchFailed' => 'Axtarış uğursuz oldu. Bağlantınızı yoxlayın.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} populyar', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} yayımlanır', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} qiymətləndirilib', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favorit', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} trenddə', + 'explore.badge.rankSeasonal' => ({required Object season, required Object n}) => '${season} üçün #${n}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} izləyir', + 'explore.badge.available' => 'Əlçatandır', + 'explore.badge.partiallyAvailable' => 'Hissəvi əlçatandır', + 'explore.badge.availableIn4k' => '4K əlçatandır', + 'explore.badge.requested' => 'Sorğu göndərildi', + 'explore.badge.pendingApproval' => 'Təsdiq gözlənilir', + 'explore.badge.processing' => 'Emal edilir', + 'explore.badge.declined' => 'Rədd edildi', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Sorğu uğursuz oldu', + 'explore.badge.requested4k' => '4K sorğu göndərildi', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} mövsüm', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Ep ${episode} ${duration} sonra', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Növbəti ${duration} sonra', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} ep', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} dəq/ep', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} siyahıya alınıb', + 'explore.stats.viewersDay' => ({required Object n}) => 'Bu gün ${n} izlədi', + 'explore.stats.viewersWeek' => ({required Object n}) => 'Bu həftə ${n} izlədi', + 'explore.stats.viewersMonth' => ({required Object n}) => 'Bu ay ${n} izlədi', + 'explore.stats.viewersYear' => ({required Object n}) => 'Bu il ${n} izlədi', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} izləyici', + 'explore.stats.planning' => ({required Object n}) => '${n} izləməyi planlaşdırır', + 'explore.stats.favorited' => ({required Object n}) => '${n} favorit', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} izləməyi dayandırdı', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, one: '${n} şərh', other: '${n} şərh', ), + 'explore.stats.votes' => ({required Object n}) => '${n} səs', + 'explore.stats.watching' => ({required Object n}) => '${n} izləyir', + 'explore.stats.completed' => ({required Object n}) => '${n} tamamladı', + 'explore.stats.onHold' => ({required Object n}) => '${n} fasilədə', + 'explore.stats.dropped' => ({required Object n}) => '${n} izləməyi dayandırdı', + 'explore.season.winter' => 'Qış', + 'explore.season.spring' => 'Yaz', + 'explore.season.summer' => 'Yay', + 'explore.season.fall' => 'Payız', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'Qısa TV', + 'explore.format.movie' => 'Kino', + 'explore.format.special' => 'Xüsusi buraxılış', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musiqi', + 'explore.format.other' => 'Digər', + 'explore.sourceMaterial.original' => 'Orijinal', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Vizual roman', + 'explore.sourceMaterial.game' => 'Oyun', + 'explore.sourceMaterial.webComic' => 'Veb komiks', + 'explore.sourceMaterial.musicRelease' => 'Musiqi', + 'explore.sourceMaterial.otherMedia' => 'Digər', + 'explore.creditRole.director' => 'Rejissor', + 'explore.creditRole.writer' => 'Ssenarist', + 'explore.creditRole.producer' => 'Prodüser', + 'explore.creditRole.creator' => 'Yaradıcı', + 'explore.creditRole.composer' => 'Bəstəkar', + 'explore.relation.prequel' => 'Prikvel', + 'explore.relation.sequel' => 'Sikvel', + 'explore.relation.sideStory' => 'Yan hekayə', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternativ versiya', + 'explore.relation.summary' => 'Xülasə', + 'explore.relation.parentStory' => 'Əsas hekayə', + 'explore.relation.adaptation' => 'Adaptasiya', + 'explore.relation.other' => 'Əlaqəli', + 'explore.broadcast' => ({required Object day, required Object time}) => '${day} saat ${time}-da yayımlanır', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '${day} saat ${time} (${timezone}) yayımlanır', + 'explore.detail.originalTitle' => 'Orijinal başlıq', + 'explore.detail.alsoKnownAs' => 'Digər adları', + 'explore.detail.studios' => 'Studiyalar', + 'explore.detail.country' => 'Ölkə', + 'explore.detail.language' => 'Dil', + 'explore.detail.released' => 'Buraxılıb', + 'explore.detail.physicalRelease' => 'Diskdə', + 'explore.detail.ended' => 'Bitib', + 'explore.detail.addedOn' => ({required Object date}) => '${date} əlavə edildi', + 'explore.detail.yourRating' => 'Sizin qiymətləndirməniz', + 'explore.detail.budget' => 'Büdcə', + 'explore.detail.revenue' => 'Kassa gəliri', + 'explore.detail.contentAdvisory' => 'Yaş tövsiyəsi', + 'explore.detail.tags' => 'Teqlər', + 'explore.detail.revealSpoilerTags' => 'Spoyler teqlərini göstər', + 'explore.detail.links' => 'Keçidlər', + 'explore.detail.watchOn' => 'İzlə', + 'explore.detail.watchTrailer' => 'Treyleri izlə', + 'explore.detail.openOn' => ({required Object site}) => '${site} saytında aç', + 'explore.detail.crew' => 'Heyət', + 'explore.detail.ratings' => 'Reytinq', + 'explore.detail.schedule' => 'Cədvəl', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, one: '${n} istifadəçi tövsiyə edir', other: '${n} istifadəçi tövsiyə edir', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '${who} tövsiyə edir', + 'explore.detail.favoritedBy' => ({required Object who}) => '${who} favorit edib', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} hələ yayımlanmayıb', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'İzləyicilərin ${percent}-i tövsiyə edir', + 'explore.detail.relatedTitles' => 'Əlaqəli başlıqlar', + 'explore.detail.background' => 'Arxa fon', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('az'))(n, one: '${n} nəticə', other: '${n} nəticə', ), 'liveTv.title' => 'Canlı TV', 'liveTv.guide' => 'Bələdçi', 'liveTv.noChannels' => 'Əlçatan kanal yoxdur', @@ -3225,8 +3889,6 @@ extension on TranslationsAz { 'watchTogether.codeMustBe5Chars' => 'Seans kodu 5 simvol olmalıdır', 'watchTogether.joinInstructions' => 'Qoşulmaq üçün təşkilatçının seans kodunu daxil edin.', 'watchTogether.failedToCreate' => 'Seans yaradıla bilmədi', - _ => null, - } ?? switch (path) { 'watchTogether.failedToJoin' => 'Seansa qoşuluna bilmədi', 'watchTogether.sessionCodeCopied' => 'Seans kodu buferə kopyalandı', 'watchTogether.relayUnreachable' => 'Rele serverinə çatmaq olmur. İnternet provayderinin bloklaması Birlikdə İzləməyə mane ola bilər.', @@ -3471,6 +4133,8 @@ extension on TranslationsAz { 'performanceOverlay.dvRpus' => 'DV RPU-ları', 'performanceOverlay.dvRpuAverage' => 'DV RPU Ort.', 'performanceOverlay.dvSampleAverage' => 'DV Nümunə Ort.', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Maks Luma', 'performanceOverlay.minLuma' => 'Min Luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3640,6 +4304,7 @@ extension on TranslationsAz { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Plezy-ni ${service} üzərində aktivləşdirin', 'services.deviceCode.body' => ({required Object url}) => '${url} ünvanına keçin və bu kodu daxil edin:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Aktivləşdirmək üçün ${service} açın', @@ -3663,9 +4328,12 @@ extension on TranslationsAz { 'services.libraryFilter.modeHintWhitelist' => 'Yalnız aşağıda seçilən kitabxanaları eyniləşdir.', 'services.libraryFilter.libraries' => 'Kitabxanalar', 'services.libraryFilter.noLibraries' => 'Kitabxana yoxdur', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product} serveri əlavə et', 'addServer.serverUrls' => 'Server URL-ləri', 'addServer.serverUrlsHelper' => 'Vergüllə ayrılmış bir neçə URL-ə icazə verilir.', 'addServer.findServer' => 'Server tap', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Yerli ${product} serverləri axtarılır...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Yerli ${product} serverləri', 'addServer.username' => 'İstifadəçi adı', 'addServer.password' => 'Şifrə', 'addServer.signIn' => 'Daxil ol', @@ -3677,11 +4345,15 @@ extension on TranslationsAz { 'addServer.addPlexTitle' => 'Plex ilə daxil ol', 'addServer.pinExpired' => 'PIN-in vaxtı bitdi. Lütfən təzədən cəhd edin.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Hesab qeydiyyatı uğursuz oldu: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '${product} server URL-inizi daxil edin', 'addServer.addConnectionTitle' => 'Qoşulma əlavə et', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} profilinə əlavə et', 'addServer.signInWithPlexCard' => 'Plex ilə daxil ol', 'addServer.signInWithPlexCardSubtitle' => 'Bu cihazı səlahiyyətləndirin.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Plex hesabını səlahiyyətləndirin.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '${product}-a qoşul', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Server URL-inizi, istifadəçi adınızı və şifrənizi daxil edin.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '${product} serverinizə daxil olun. ${name} ilə əlaqələndirilir.', 'addServer.borrowFromAnotherProfile' => 'Başqa profildən götür', 'addServer.borrowFromAnotherProfileSubtitle' => 'Başqa profilin qoşulmasını yenidən istifadə edin.', _ => null, diff --git a/lib/i18n/strings_bg.g.dart b/lib/i18n/strings_bg.g.dart index f2402ca6..6b09a8cd 100644 --- a/lib/i18n/strings_bg.g.dart +++ b/lib/i18n/strings_bg.g.dart @@ -67,6 +67,7 @@ class TranslationsBg extends Translations with BaseTranslations 'Изчакване на удостоверяване...\nВлезте от браузъра си.'; @override String get useBrowser => 'Използвай браузър'; @override String get or => 'или'; + @override String connectToMediaBrowser({required Object product}) => 'Свържи се с ${product}'; @override String get useQuickConnect => 'Използвай Quick Connect'; @override String get quickConnectInstructions => 'Отворете Quick Connect в Jellyfin и въведете този код.'; @override String get quickConnectWaiting => 'Изчакване на одобрение…'; @@ -175,6 +177,7 @@ class _Translations$common$bg extends Translations$common$en { @override String get fullscreen => 'На цял екран'; @override String get exitFullscreen => 'Изход от цял екран'; @override String get pressBackAgainToExit => 'Натиснете Назад отново, за да излезете'; + @override late final _Translations$common$ratingSource$bg ratingSource = _Translations$common$ratingSource$bg._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$bg extends Translations$settings$en { @override String get darkTheme => 'Тъмна'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Плътност на библиотеката'; + @override String get displayScale => 'Мащаб на дисплея'; @override String get compact => 'Компактна'; @override String get comfortable => 'Удобна'; @override String get tvCornerSpotlightBackdrop => 'Фон с акцент в ъгъла'; @@ -287,6 +291,11 @@ class _Translations$settings$bg extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => 'Автоматично (препоръчително)'; @override String bufferSizeWarning({required Object heap, required Object size}) => 'Налична памет: ${heap} MB. Буфер от ${size} MB може да повлияе на възпроизвеждането.'; + @override String get playbackBuffer => 'Буфер за възпроизвеждане'; + @override String get playbackBufferAuto => 'Автоматично (препоръчително)'; + @override String get playbackBufferLarge => 'Голям'; + @override String get playbackBufferExtraLarge => 'Изключително голям'; + @override String get playbackBufferDescription => 'Буферира повече при нестабилни връзки. Също ограничен от размера на буфера.'; @override String get defaultQualityTitle => 'Качество по подразбиране'; @override String get musicQualityTitle => 'Качество на музиката'; @override String get subtitleStyling => 'Стил на субтитрите'; @@ -320,6 +329,9 @@ class _Translations$settings$bg extends Translations$settings$en { @override String get debugLoggingDescription => 'Включи подробни логове за диагностика'; @override String get viewLogs => 'Виж логовете'; @override String get viewLogsDescription => 'Преглед на логовете на приложението'; + @override String get clearImageCache => 'Изчисти кеша на изображенията'; + @override String get clearImageCacheDescription => 'Изчиства кешираните обложки и миниатюри. Изображенията може да се зареждат по-бавно, докато не бъдат изтеглени отново.'; + @override String get clearImageCacheSuccess => 'Кешът на изображенията е изчистен успешно'; @override String get resetSettings => 'Нулирай настройките'; @override String get resetSettingsDescription => 'Възстанови настройките по подразбиране. Това не може да бъде отменено.'; @override String get resetSettingsSuccess => 'Настройките са нулирани успешно'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$bg extends Translations$fileInfo$en { // Translations @override String get title => 'Информация за файла'; + @override String get overview => 'Общ преглед'; @override String get video => 'Видео'; @override String get audio => 'Аудио'; @override String get subtitles => 'Субтитри'; + @override String get images => 'Вградени изображения'; + @override String get dataStreams => 'Потоци от данни'; + @override String get lyrics => 'Текстове на песни'; @override String get file => 'Файл'; + @override String get attachments => 'Прикачени файлове'; + @override String get delivery => 'Доставка'; + @override String versionCounter({required Object index, required Object count}) => 'Версия ${index} от ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Файл ${index} от ${count}'; + @override String get noStreams => 'Сървърът не е отчел потоци за този файл.'; + @override String get copyPath => 'Копирай пътя'; + @override String get pathCopied => 'Пътят на файла е копиран'; @override String get codec => 'Кодек'; + @override String get codecTag => 'Етикет на кодека'; @override String get resolution => 'Резолюция'; + @override String get codedResolution => 'Кодирана разделителна способност'; @override String get bitrate => 'Битрейт'; @override String get frameRate => 'Кадрова честота'; + @override String get rotation => 'Завъртане'; + @override String get comment => 'Коментар'; + @override String get audioDescription => 'Аудио описание'; + @override String get headerCompression => 'Компресия на заглавката'; + @override String get sidecarFile => 'Сайдкар файл'; + @override String get transportTimestamp => 'Времева отметка на транспорта'; + @override String get displayOffset => 'Отместване при показване'; + @override String get previewFailureCode => 'Код на грешка при прегледа'; + @override String get previewRetries => 'Опити при прегледа'; @override String get aspectRatio => 'Съотношение на страните'; + @override String get pixelAspectRatio => 'Съотношение на пиксела'; @override String get profile => 'Профил'; + @override String get level => 'Ниво'; @override String get bitDepth => 'Битова дълбочина'; + @override String get pixelFormat => 'Формат на пикселите'; @override String get colorSpace => 'Цветово пространство'; @override String get colorRange => 'Цветови диапазон'; @override String get colorPrimaries => 'Основни цветове'; + @override String get colorTransfer => 'Цветов трансфер'; @override String get chromaSubsampling => 'Цветова субдискретизация'; + @override String get chromaLocation => 'Позиция на хрома'; + @override String get scanType => 'Тип на сканиране'; + @override String get interlaced => 'С преплетени редове'; + @override String get anamorphic => 'Анаморфен'; + @override String get referenceFrames => 'Референтни кадри'; + @override String get dynamicRange => 'Динамичен обхват'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Ниво на Dolby Vision'; + @override String get dolbyVisionVersion => 'Версия на Dolby Vision'; + @override String get dolbyVisionLayers => 'Слоеве на Dolby Vision'; + @override String get baseLayerCompatibility => 'Съвместимост на базовия слой'; + @override String get avcBitstream => 'AVC битов поток'; + @override String get nalLengthSize => 'Размер на дължината на NAL'; + @override String get scalingMatrix => 'Персонализирана матрица за мащабиране'; + @override String get streamIdentifier => 'Идентификатор на потока'; + @override String get streamIndex => 'Индекс на потока'; + @override String get streamId => 'ID на потока'; + @override String get language => 'Език'; + @override String get languageCode => 'Код на езика'; + @override String get streamTitle => 'Заглавие на пистата'; @override String get channels => 'Канали'; + @override String get sampleRate => 'Честота на дискретизация'; + @override String get spatialAudio => 'Пространствено аудио'; + @override String get textBased => 'Текстов'; + @override String get subtitleFormat => 'Сайдкар формат'; + @override String get provider => 'Доставчик'; + @override String get matchScore => 'Степен на съвпадение'; + @override String get externalDelivery => 'Може да се предоставя отделно'; + @override String get sidecarPath => 'Път на сайдкар файла'; + @override String get sourceStream => 'Копирано от'; + @override String get temporary => 'Временен'; + @override String get timeBase => 'Времева база'; @override String get overallBitrate => 'Общ битрейт'; @override String get path => 'Път'; + @override String get fileName => 'Име на файла'; @override String get size => 'Размер'; + @override String get totalSize => 'Общ размер'; @override String get container => 'Контейнер'; @override String get duration => 'Продължителност'; + @override String get previewThumbnails => 'Миниатюри за преглед'; + @override String get previewIndex => 'Индекс на прегледа'; + @override String get packetLength => 'Дължина на пакета'; + @override String get filePresent => 'Файлът е наличен'; + @override String get fileReadable => 'Четим от сървъра'; + @override String get streamPath => 'Път на потока'; @override String get optimizedForStreaming => 'Оптимизирано за стрийминг'; @override String get has64bitOffsets => '64-битови отмествания'; + @override String get protocol => 'Протокол'; + @override String get mediaType => 'Тип медия'; + @override String get sourceKind => 'Вид източник'; + @override String get optimizedVersion => 'Оптимизирана версия'; + @override String get optimizationTarget => 'Цел на оптимизацията'; + @override String get deletedAt => 'Изтрит'; + @override String get remoteSource => 'Отдалечен източник'; + @override String get infiniteStream => 'Безкраен поток'; + @override String get directPlay => 'Директно възпроизвеждане'; + @override String get directStream => 'Директен поток'; + @override String get transcoding => 'Транскодиране'; + @override String get etag => 'ETag'; + @override String get versionId => 'ID на версията'; + @override String get fileId => 'ID на файла'; + @override String get defaultAudioTrack => 'Звукова пътека по подразбиране'; + @override String get defaultSubtitleTrack => 'Субтитри по подразбиране'; + @override String get subtitlesOff => 'Изкл.'; + @override String get flagDefault => 'По подразбиране'; + @override String get flagForced => 'Принудителни'; + @override String get flagSelected => 'Избран'; + @override String get flagExternal => 'Външен'; + @override String get flagHearingImpaired => 'За хора с увреден слух'; + @override String get flagDub => 'Дублаж'; + @override String get flagOriginal => 'Оригинал'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$bg extends Translations$mediaMenu$en { @override String get shufflePlay => 'Разбъркано възпроизвеждане'; @override String get shuffleNotAvailableOffline => 'Разбърканото възпроизвеждане не е налично офлайн'; @override String get fileInfo => 'Информация за файла'; + @override String get deleteEpisodeFromServer => 'Изтрий епизода от сървъра'; + @override String get deleteSeasonFromServer => 'Изтрий сезона от сървъра'; + @override String get deleteShowFromServer => 'Изтрий сериала от сървъра'; + @override String get deleteMovieFromServer => 'Изтрий филма от сървъра'; + @override String get deleteEpisodeTitle => 'Да изтрия ли този епизод?'; + @override String get deleteSeasonTitle => 'Да изтрия ли този сезон?'; + @override String get deleteShowTitle => 'Да изтрия ли този сериал?'; + @override String get deleteMovieTitle => 'Да изтрия ли този филм?'; + @override String get deleteEpisodeConfirm => 'Изтрий епизода'; + @override String get deleteSeasonConfirm => 'Изтрий сезона'; + @override String get deleteShowConfirm => 'Изтрий сериала'; + @override String get deleteMovieConfirm => 'Изтрий филма'; + @override String get deleteAnyway => 'Изтрий въпреки това'; + @override String confirmDeleteTarget({required Object title}) => 'Завинаги да изтрия ли ${title} от сървъра ви?'; @override String get deleteMultipleWarning => 'Това включва всички епизоди и техните файлове.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, + one: 'Това изтрива целия ${n} епизод в него, както и файла му.', + other: 'Това изтрива всичките ${n} епизода в него, както и техните файлове.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, + one: 'Този елемент се съхранява като ${n} файл, който ще бъде изтрит.', + other: 'Този елемент се съхранява в ${n} файла и всички те ще бъдат изтрити.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, + one: '${n} друг епизод се съхранява в същия файл и също ще бъде изтрит:', + other: '${n} други епизода се съхраняват в същия файл и също ще бъдат изтрити:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy не успя да провери кои файлове ще бъдат премахнати, така че може да изтрие повече от посочения по-горе елемент. Откажете и опитайте отново, или изтрийте въпреки това.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Сървърът ви не предостави данни за файловете на този елемент, така че Plezy не може да провери кои файлове ще бъдат премахнати. Може да изтрие повече от посочения по-горе елемент.'; @override String get mediaDeletedSuccessfully => 'Елементът е изтрит успешно'; @override String get mediaFailedToDelete => 'Неуспешно изтриване на елемента'; @override String get rate => 'Оцени'; @@ -657,6 +786,9 @@ class _Translations$videoControls$bg extends Translations$videoControls$en { @override String get playNext => 'Пусни следващото'; @override String get playButton => 'Пусни'; @override String get pauseButton => 'Пауза'; + @override String get playbackPaused => 'На пауза'; + @override String get playbackResumed => 'Възпроизвежда се'; + @override String get loadingVideo => 'Зареждане на видеото'; @override String get showPlaybackControls => 'Покажи контролите за възпроизвеждане'; @override String get hidePlaybackControls => 'Скрий контролите за възпроизвеждане'; @override String seekBackwardButton({required Object seconds}) => 'Превърти назад ${seconds} секунди'; @@ -726,6 +858,7 @@ class _Translations$messages$bg extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Премахнато от продължаване на гледането'; @override String errorLoading({required Object error}) => 'Грешка: ${error}'; + @override String get searchPartialResults => 'Някои медийни сървъри не можаха да бъдат претърсени. Показват се наличните резултати.'; @override String get streamInterrupted => 'Потокът прекъсна. Натиснете „Пусни“ или превъртете, за да опитате отново.'; @override String get liveStreamInterrupted => 'Потокът на живо прекъсна. Натиснете „Пусни“, за да опитате отново.'; @override String get fileInfoNotAvailable => 'Информацията за файла не е налична'; @@ -764,6 +897,8 @@ class _Translations$messages$bg extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Превключване към съвместим плейър...'; @override String get serverLimitTitle => 'Възпроизвеждането е неуспешно'; @override String get serverLimitBody => 'Грешка на сървъра (HTTP 500). Вероятно лимит за пропускателна способност/транскодиране е отхвърлил тази сесия. Помолете собственика да го коригира.'; + @override String get mediaUnreadableTitle => 'Файлът е недостъпен'; + @override String get mediaUnreadableBody => 'Сървърът намери този елемент, но не можа да прочете файла му (HTTP 404). Файлът вероятно е бил преместен, изтрит или хранилището му е офлайн. Помолете собственика на сървъра да провери файла и да сканира отново библиотеката.'; @override String get logsUploaded => 'Логовете са качени'; @override String get logsUploadFailed => 'Неуспешно качване на логовете'; @override String get logId => 'ID на лога'; @@ -917,6 +1052,8 @@ class _Translations$connections$bg extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Сесията за ${name} е изтекла'; @override String sessionExpiredMany({required Object count}) => 'Сесиите за ${count} сървъра са изтекли'; @override String get signInAgain => 'Влез отново'; + @override String editMediaBrowserTitle({required Object product}) => 'Редактирай връзката с ${product}'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Добавете или премахнете URL адреси за ${serverName}. Plezy ще използва достъпния URL адрес с най-ниска латентност.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$bg extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Търсенето е неуспешно: ${error}'; + @override String get searchUnavailable => 'Търсенето не можа да достигне до нито един медиен сървър.'; @override String connectionTimeout({required Object context}) => 'Изтече времето за връзка при зареждане на ${context}'; @override String get connectionFailed => 'Не може да се осъществи връзка с медиен сървър'; @override String unableToLoad({required Object context}) => 'Не може да се зареди ${context}. Опитайте отново.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$bg extends Translations$logs$en { @override String get uploadLogs => 'Качи логовете'; } +// Path: startup +class _Translations$startup$bg extends Translations$startup$en { + _Translations$startup$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy не можа да стартира'; + @override String get failedBody => 'Нещо се обърка по време на стартирането. Детайлите по-долу показват какво е причинило грешката.'; + @override String get failedBodyRepairable => 'Запазеният файл с настройки на Plezy е повреден и трябва да бъде възстановен, преди Plezy да стартира. Повторните опити няма да помогнат — изберете „Ремонт на хранилището“.'; + @override String get phaseLabel => 'Стъпка'; + @override String get showDetails => 'Покажи детайлите'; + @override String get hideDetails => 'Скрий детайлите'; + @override String get copyDetails => 'Копирай детайлите'; + @override String get detailsCopied => 'Детайлите са копирани в клипборда'; + @override String get uploadDetails => 'Качи детайлите'; + @override String get repairStorage => 'Ремонт на хранилището'; + @override String get repairTitle => 'Да ремонтирам ли съхранените данни?'; + @override String get repairBodyCommon => 'Файлът с настройки на Plezy е повреден и не може да бъде прочетен. Ремонтът връща всяка настройка към стойността ѝ по подразбиране.'; + @override String get repairBodyOneCredential => 'Един запис за вход е повреден и не може да бъде прочетен. Ремонтът премахва само него; останалите ви настройки не се пипат.'; + @override String get repairBodySignInsKept => 'Сървърите и профилите ви трябва да останат вписани.'; + @override String get repairBodySignInsLost => 'Ключът, защитаващ запазените ви вписвания, не може да бъде възстановен от този файл, така че ще трябва да се впишете отново във всеки сървър и профил. Нищо на медийния ви сървър не се засяга.'; + @override String get repairBodySessionsUncertain => 'Трекърите (MAL, AniList, Simkl, Trakt) и Seerr се съхраняват отделно и може да оцелеят или не. Plezy ще ви каже точно какво е запазил.'; + @override String get repairConfirm => 'Ремонтирай'; + @override String get repairSucceeded => 'Хранилището е ремонтирано'; + @override String get repairNeedsRestart => 'Хранилището е ремонтирано — изисква се рестартиране'; + @override String get restartRequiredBody => 'Данните ви бяха ремонтирани, но Plezy трябва да стартира наново, преди да ги използва. Затворете Plezy и го отворете отново.'; + @override String get quitPlezy => 'Изход от Plezy'; + @override String get repairFailed => 'Ремонтът се провали'; + @override String get repairKeptSignIns => 'Сървърите и профилите ви са все още вписани.'; + @override String get repairLostSignIns => 'Ключът, защитаващ запазените ви вписвания, не можа да бъде възстановен. Ще трябва да се впишете отново във всеки сървър и профил.'; + @override String get repairLostSessions => 'Поне една връзка с трекър или Seerr беше загубена и трябва да бъде възстановена.'; + @override String get backupTitle => 'Запазено е копие на повредения файл'; + @override String get backupWarning => 'То съдържа вашите данни за вписване. Не го качвайте и не го споделяйте.'; + @override String get deleteBackup => 'Изтрий копието'; + @override String get backupDeleted => 'Копието е изтрито.'; + @override String get previousFailureTitle => 'Plezy не успя да стартира последния път'; +} + // Path: licenses class _Translations$licenses$bg extends Translations$licenses$en { _Translations$licenses$bg._(TranslationsBg root) : this._root = root, super.internal(root); @@ -1099,7 +1276,7 @@ class _Translations$navigation$bg extends Translations$navigation$en { // Translations @override String get libraries => 'Библиотеки'; @override String get downloads => 'Изтегляния'; - @override String get liveTv => 'Телевизия на живо'; + @override String get liveTv => 'TV на живо'; @override String get explore => 'Разгледай'; } @@ -1132,6 +1309,20 @@ class _Translations$explore$bg extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Няма резултати за "${query}"'; @override String searchPrompt({required Object source}) => 'Търси филми и сериали в ${source}.'; @override String get searchFailed => 'Търсенето се провали. Провери връзката си и опитай отново.'; + @override late final _Translations$explore$badge$bg badge = _Translations$explore$badge$bg._(_root); + @override late final _Translations$explore$stats$bg stats = _Translations$explore$stats$bg._(_root); + @override late final _Translations$explore$season$bg season = _Translations$explore$season$bg._(_root); + @override late final _Translations$explore$format$bg format = _Translations$explore$format$bg._(_root); + @override late final _Translations$explore$sourceMaterial$bg sourceMaterial = _Translations$explore$sourceMaterial$bg._(_root); + @override late final _Translations$explore$creditRole$bg creditRole = _Translations$explore$creditRole$bg._(_root); + @override late final _Translations$explore$relation$bg relation = _Translations$explore$relation$bg._(_root); + @override String broadcast({required Object day, required Object time}) => 'Излъчва се в ${day} от ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Излъчва се в ${day} от ${time} ${timezone}'; + @override late final _Translations$explore$detail$bg detail = _Translations$explore$detail$bg._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, + one: '${n} резултат', + other: '${n} резултата', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$bg extends Translations$downloads$en { @override String get editSyncRule => 'Редактирай правило за синхронизация'; @override String get removeSyncRule => 'Премахни правило за синхронизация'; @override String removeSyncRuleConfirm({required Object title}) => 'Да се спре ли синхронизацията за "${title}"? Изтеглените епизоди ще останат.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Да спра ли синхронизирането на „${title}“?'; + @override String get deleteSyncRuleDownloads => 'Изтрий и свързаните изтегляния'; + @override String get deleteSyncRuleDownloadsDescription => 'Изтеглянията, използвани от друго правило за синхронизация или профил, ще бъдат запазени.'; @override String syncRuleCreated({required Object count}) => 'Правилото за синхронизация е създадено — запазват се ${count} негледани епизода'; @override String get syncRuleUpdated => 'Правилото за синхронизация е обновено'; @override String get syncRuleRemoved => 'Правилото за синхронизация е премахнато'; + @override String get syncRuleAndDownloadsRemoved => 'Правилото за синхронизация и свързаните изтегляния са премахнати'; + @override String get syncRuleCleanupBusy => 'Правилата за синхронизация в момента се обновяват. Опитайте отново след малко.'; + @override String get syncRuleCleanupUnavailable => 'Свързаните изтегляния не можаха да бъдат идентифицирани безопасно. Свържете се отново със сървъра и опитайте отново, или премахнете правилото, без да изтривате изтеглянията.'; @override String syncedNewEpisodes({required Object count, required Object title}) => 'Синхронизирани са ${count} нови епизода за ${title}'; @override String get activeSyncRules => 'Правила за синхронизация'; @override String get noSyncRules => 'Няма правила за синхронизация'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$bg extends Translations$addServer$en { final TranslationsBg _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Добави ${product} сървър'; @override String get serverUrls => 'URL адреси на сървъра'; @override String get serverUrlsHelper => 'Позволени са няколко URL адреса, разделени със запетаи.'; @override String get findServer => 'Намери сървър'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Търсене на локални ${product} сървъри...'; + @override String localMediaBrowserServers({required Object product}) => 'Локални ${product} сървъри'; @override String get username => 'Потребителско име'; @override String get password => 'Парола'; @override String get signIn => 'Вход'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$bg extends Translations$addServer$en { @override String get addPlexTitle => 'Вход с Plex'; @override String get pinExpired => 'PIN-ът изтече преди вход. Моля, опитайте отново.'; @override String failedToRegisterAccount({required Object error}) => 'Неуспешна регистрация на акаунт: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Въведете URL адреса на вашия ${product} сървър'; @override String get addConnectionTitle => 'Добави връзка'; @override String addConnectionTitleScoped({required Object name}) => 'Добави към ${name}'; @override String get signInWithPlexCard => 'Вход с Plex'; @override String get signInWithPlexCardSubtitle => 'Удостоверете това устройство. Споделените сървъри се добавят.'; @override String get signInWithPlexCardSubtitleScoped => 'Удостоверете Plex акаунт. Домашните потребители стават профили.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Свържи се с ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Въведете URL адреса на сървъра, потребителското име и паролата.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Впишете се в своя ${product} сървър. Обвързва се с ${name}.'; @override String get borrowFromAnotherProfile => 'Използвай от друг профил'; @override String get borrowFromAnotherProfileSubtitle => 'Използвай връзка от друг профил. PIN-защитените профили изискват PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$bg extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get critic => 'Критици'; + @override String get audience => 'Публика'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Критиците на Rotten Tomatoes'; + @override String get rottenTomatoesAudience => 'Публиката на Rotten Tomatoes'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$bg extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$bg._(TranslationsBg root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$bg extends Translations$explore$status$en { @override String get upcoming => 'Предстоящ'; } +// Path: explore.badge +class _Translations$explore$badge$bg extends Translations$explore$badge$en { + _Translations$explore$badge$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} популярен'; + @override String rankAiring({required Object n}) => '#${n} в ефир'; + @override String rankRated({required Object n}) => '#${n} оценен'; + @override String rankFavorited({required Object n}) => '#${n} най-харесван'; + @override String rankTrending({required Object n}) => '#${n} в тенденция'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} през ${season}'; + @override String watchingNow({required Object n}) => '${n} гледат'; + @override String get available => 'Наличен'; + @override String get partiallyAvailable => 'Частично наличен'; + @override String get availableIn4k => 'Наличен в 4K'; + @override String get requested => 'Заявен'; + @override String get pendingApproval => 'В очакване на одобрение'; + @override String get processing => 'Обработва се'; + @override String get declined => 'Отхвърлен'; + @override String get requestFailed => 'Заявката се провали'; + @override String get requested4k => 'Заявен в 4K'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} сезона'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Еп. ${episode} след ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Следващ след ${duration}'; + @override String episodesShort({required Object n}) => '${n} еп.'; + @override String minutesPerEpisode({required Object n}) => '${n} мин/еп'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$bg extends Translations$explore$stats$en { + _Translations$explore$stats$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} в списък'; + @override String viewersDay({required Object n}) => '${n} гледали днес'; + @override String viewersWeek({required Object n}) => '${n} гледали тази седмица'; + @override String viewersMonth({required Object n}) => '${n} гледали този месец'; + @override String viewersYear({required Object n}) => '${n} гледали тази година'; + @override String viewersAllTime({required Object n}) => '${n} зрители'; + @override String planning({required Object n}) => '${n} планират да гледат'; + @override String favorited({required Object n}) => '${n} в любими'; + @override String dropRate({required Object percent}) => '${percent} го изоставиха'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, + one: '${n} коментар', + other: '${n} коментара', + ); + @override String votes({required Object n}) => '${n} гласа'; + @override String watching({required Object n}) => '${n} го гледат'; + @override String completed({required Object n}) => '${n} завършили'; + @override String onHold({required Object n}) => '${n} на пауза'; + @override String dropped({required Object n}) => '${n} изоставили'; +} + +// Path: explore.season +class _Translations$explore$season$bg extends Translations$explore$season$en { + _Translations$explore$season$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get winter => 'Зима'; + @override String get spring => 'Пролет'; + @override String get summer => 'Лято'; + @override String get fall => 'Есен'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$bg extends Translations$explore$format$en { + _Translations$explore$format$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get tv => 'ТВ'; + @override String get tvShort => 'ТВ късометражен'; + @override String get movie => 'Филм'; + @override String get special => 'Специален'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Музика'; + @override String get other => 'Друго'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$bg extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get original => 'Оригинал'; + @override String get manga => 'Манга'; + @override String get lightNovel => 'Лайт новела'; + @override String get novel => 'Роман'; + @override String get visualNovel => 'Визуална новела'; + @override String get game => 'Игра'; + @override String get webComic => 'Уеб комикс'; + @override String get musicRelease => 'Музика'; + @override String get otherMedia => 'Друго'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$bg extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get director => 'Режисьор'; + @override String get writer => 'Сценарист'; + @override String get producer => 'Продуцент'; + @override String get creator => 'Създател'; + @override String get composer => 'Композитор'; +} + +// Path: explore.relation +class _Translations$explore$relation$bg extends Translations$explore$relation$en { + _Translations$explore$relation$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Приквел'; + @override String get sequel => 'Сиквел'; + @override String get sideStory => 'Странична история'; + @override String get spinOff => 'Спин-оф'; + @override String get alternativeVersion => 'Алтернативна версия'; + @override String get summary => 'Резюме'; + @override String get parentStory => 'Основна история'; + @override String get adaptation => 'Адаптация'; + @override String get other => 'Свързано'; +} + +// Path: explore.detail +class _Translations$explore$detail$bg extends Translations$explore$detail$en { + _Translations$explore$detail$bg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Оригинално заглавие'; + @override String get alsoKnownAs => 'Известен също като'; + @override String get studios => 'Студия'; + @override String get country => 'Държава'; + @override String get language => 'Език'; + @override String get released => 'Излязъл'; + @override String get physicalRelease => 'На диск'; + @override String get ended => 'Приключил'; + @override String addedOn({required Object date}) => 'Добавен на ${date}'; + @override String get yourRating => 'Вашата оценка'; + @override String get budget => 'Бюджет'; + @override String get revenue => 'Боксофис'; + @override String get contentAdvisory => 'Възрастова препоръка'; + @override String get tags => 'Етикети'; + @override String get revealSpoilerTags => 'Покажи етикетите за спойлери'; + @override String get links => 'Връзки'; + @override String get watchOn => 'Гледай в'; + @override String get watchTrailer => 'Гледай трейлъра'; + @override String openOn({required Object site}) => 'Отвори в ${site}'; + @override String get crew => 'Екип'; + @override String get ratings => 'Оценки'; + @override String get schedule => 'Програма'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, + one: 'Препоръчан от ${n} потребител', + other: 'Препоръчан от ${n} потребители', + ); + @override String recommendedBy({required Object who}) => 'Препоръчан от ${who}'; + @override String favoritedBy({required Object who}) => 'В любими от ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} все още не са излъчени'; + @override String recommendedByPercent({required Object percent}) => 'Препоръчан от ${percent} от зрителите'; + @override String get relatedTitles => 'Свързани заглавия'; + @override String get background => 'Фон'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$bg extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$bg._(TranslationsBg root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$bg extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsBg { 'auth.waitingForAuth' => 'Изчакване на удостоверяване...\nВлезте от браузъра си.', 'auth.useBrowser' => 'Използвай браузър', 'auth.or' => 'или', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Свържи се с ${product}', 'auth.useQuickConnect' => 'Използвай Quick Connect', 'auth.quickConnectInstructions' => 'Отворете Quick Connect в Jellyfin и въведете този код.', 'auth.quickConnectWaiting' => 'Изчакване на одобрение…', @@ -2248,6 +2654,17 @@ extension on TranslationsBg { 'common.fullscreen' => 'На цял екран', 'common.exitFullscreen' => 'Изход от цял екран', 'common.pressBackAgainToExit' => 'Натиснете Назад отново, за да излезете', + 'common.ratingSource.critic' => 'Критици', + 'common.ratingSource.audience' => 'Публика', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Критиците на Rotten Tomatoes', + 'common.ratingSource.rottenTomatoesAudience' => 'Публиката на Rotten Tomatoes', 'screens.licenses' => 'Лицензи', 'screens.switchProfile' => 'Смяна на профил', 'screens.subtitleStyling' => 'Стил на субтитрите', @@ -2284,6 +2701,7 @@ extension on TranslationsBg { 'settings.darkTheme' => 'Тъмна', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Плътност на библиотеката', + 'settings.displayScale' => 'Мащаб на дисплея', 'settings.compact' => 'Компактна', 'settings.comfortable' => 'Удобна', 'settings.tvCornerSpotlightBackdrop' => 'Фон с акцент в ъгъла', @@ -2333,6 +2751,11 @@ extension on TranslationsBg { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => 'Автоматично (препоръчително)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => 'Налична памет: ${heap} MB. Буфер от ${size} MB може да повлияе на възпроизвеждането.', + 'settings.playbackBuffer' => 'Буфер за възпроизвеждане', + 'settings.playbackBufferAuto' => 'Автоматично (препоръчително)', + 'settings.playbackBufferLarge' => 'Голям', + 'settings.playbackBufferExtraLarge' => 'Изключително голям', + 'settings.playbackBufferDescription' => 'Буферира повече при нестабилни връзки. Също ограничен от размера на буфера.', 'settings.defaultQualityTitle' => 'Качество по подразбиране', 'settings.musicQualityTitle' => 'Качество на музиката', 'settings.subtitleStyling' => 'Стил на субтитрите', @@ -2366,6 +2789,9 @@ extension on TranslationsBg { 'settings.debugLoggingDescription' => 'Включи подробни логове за диагностика', 'settings.viewLogs' => 'Виж логовете', 'settings.viewLogsDescription' => 'Преглед на логовете на приложението', + 'settings.clearImageCache' => 'Изчисти кеша на изображенията', + 'settings.clearImageCacheDescription' => 'Изчиства кешираните обложки и миниатюри. Изображенията може да се зареждат по-бавно, докато не бъдат изтеглени отново.', + 'settings.clearImageCacheSuccess' => 'Кешът на изображенията е изчистен успешно', 'settings.resetSettings' => 'Нулирай настройките', 'settings.resetSettingsDescription' => 'Възстанови настройките по подразбиране. Това не може да бъде отменено.', 'settings.resetSettingsSuccess' => 'Настройките са нулирани успешно', @@ -2549,29 +2975,118 @@ extension on TranslationsBg { 'hotkeys.actions.skipMarker' => 'Прескочи интро/финални надписи', 'hotkeys.actions.screenshot' => 'Направи екранна снимка', 'fileInfo.title' => 'Информация за файла', + 'fileInfo.overview' => 'Общ преглед', 'fileInfo.video' => 'Видео', 'fileInfo.audio' => 'Аудио', 'fileInfo.subtitles' => 'Субтитри', + 'fileInfo.images' => 'Вградени изображения', + 'fileInfo.dataStreams' => 'Потоци от данни', + 'fileInfo.lyrics' => 'Текстове на песни', 'fileInfo.file' => 'Файл', + 'fileInfo.attachments' => 'Прикачени файлове', + 'fileInfo.delivery' => 'Доставка', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Версия ${index} от ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Файл ${index} от ${count}', + 'fileInfo.noStreams' => 'Сървърът не е отчел потоци за този файл.', + 'fileInfo.copyPath' => 'Копирай пътя', + 'fileInfo.pathCopied' => 'Пътят на файла е копиран', 'fileInfo.codec' => 'Кодек', + 'fileInfo.codecTag' => 'Етикет на кодека', 'fileInfo.resolution' => 'Резолюция', + 'fileInfo.codedResolution' => 'Кодирана разделителна способност', 'fileInfo.bitrate' => 'Битрейт', 'fileInfo.frameRate' => 'Кадрова честота', + 'fileInfo.rotation' => 'Завъртане', + 'fileInfo.comment' => 'Коментар', + 'fileInfo.audioDescription' => 'Аудио описание', + 'fileInfo.headerCompression' => 'Компресия на заглавката', + 'fileInfo.sidecarFile' => 'Сайдкар файл', + 'fileInfo.transportTimestamp' => 'Времева отметка на транспорта', + 'fileInfo.displayOffset' => 'Отместване при показване', + 'fileInfo.previewFailureCode' => 'Код на грешка при прегледа', + 'fileInfo.previewRetries' => 'Опити при прегледа', 'fileInfo.aspectRatio' => 'Съотношение на страните', + 'fileInfo.pixelAspectRatio' => 'Съотношение на пиксела', 'fileInfo.profile' => 'Профил', + 'fileInfo.level' => 'Ниво', 'fileInfo.bitDepth' => 'Битова дълбочина', + 'fileInfo.pixelFormat' => 'Формат на пикселите', 'fileInfo.colorSpace' => 'Цветово пространство', 'fileInfo.colorRange' => 'Цветови диапазон', 'fileInfo.colorPrimaries' => 'Основни цветове', + 'fileInfo.colorTransfer' => 'Цветов трансфер', 'fileInfo.chromaSubsampling' => 'Цветова субдискретизация', + 'fileInfo.chromaLocation' => 'Позиция на хрома', + 'fileInfo.scanType' => 'Тип на сканиране', + 'fileInfo.interlaced' => 'С преплетени редове', + 'fileInfo.anamorphic' => 'Анаморфен', + 'fileInfo.referenceFrames' => 'Референтни кадри', + 'fileInfo.dynamicRange' => 'Динамичен обхват', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Ниво на Dolby Vision', + 'fileInfo.dolbyVisionVersion' => 'Версия на Dolby Vision', + 'fileInfo.dolbyVisionLayers' => 'Слоеве на Dolby Vision', + 'fileInfo.baseLayerCompatibility' => 'Съвместимост на базовия слой', + 'fileInfo.avcBitstream' => 'AVC битов поток', + 'fileInfo.nalLengthSize' => 'Размер на дължината на NAL', + 'fileInfo.scalingMatrix' => 'Персонализирана матрица за мащабиране', + 'fileInfo.streamIdentifier' => 'Идентификатор на потока', + 'fileInfo.streamIndex' => 'Индекс на потока', + 'fileInfo.streamId' => 'ID на потока', + 'fileInfo.language' => 'Език', + 'fileInfo.languageCode' => 'Код на езика', + 'fileInfo.streamTitle' => 'Заглавие на пистата', 'fileInfo.channels' => 'Канали', + 'fileInfo.sampleRate' => 'Честота на дискретизация', + 'fileInfo.spatialAudio' => 'Пространствено аудио', + 'fileInfo.textBased' => 'Текстов', + 'fileInfo.subtitleFormat' => 'Сайдкар формат', + 'fileInfo.provider' => 'Доставчик', + 'fileInfo.matchScore' => 'Степен на съвпадение', + 'fileInfo.externalDelivery' => 'Може да се предоставя отделно', + 'fileInfo.sidecarPath' => 'Път на сайдкар файла', + 'fileInfo.sourceStream' => 'Копирано от', + 'fileInfo.temporary' => 'Временен', + 'fileInfo.timeBase' => 'Времева база', 'fileInfo.overallBitrate' => 'Общ битрейт', 'fileInfo.path' => 'Път', + 'fileInfo.fileName' => 'Име на файла', 'fileInfo.size' => 'Размер', + 'fileInfo.totalSize' => 'Общ размер', 'fileInfo.container' => 'Контейнер', 'fileInfo.duration' => 'Продължителност', + 'fileInfo.previewThumbnails' => 'Миниатюри за преглед', + 'fileInfo.previewIndex' => 'Индекс на прегледа', + 'fileInfo.packetLength' => 'Дължина на пакета', + 'fileInfo.filePresent' => 'Файлът е наличен', + 'fileInfo.fileReadable' => 'Четим от сървъра', + 'fileInfo.streamPath' => 'Път на потока', 'fileInfo.optimizedForStreaming' => 'Оптимизирано за стрийминг', 'fileInfo.has64bitOffsets' => '64-битови отмествания', + 'fileInfo.protocol' => 'Протокол', + 'fileInfo.mediaType' => 'Тип медия', + 'fileInfo.sourceKind' => 'Вид източник', + 'fileInfo.optimizedVersion' => 'Оптимизирана версия', + 'fileInfo.optimizationTarget' => 'Цел на оптимизацията', + 'fileInfo.deletedAt' => 'Изтрит', + 'fileInfo.remoteSource' => 'Отдалечен източник', + 'fileInfo.infiniteStream' => 'Безкраен поток', + 'fileInfo.directPlay' => 'Директно възпроизвеждане', + 'fileInfo.directStream' => 'Директен поток', + 'fileInfo.transcoding' => 'Транскодиране', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'ID на версията', + 'fileInfo.fileId' => 'ID на файла', + 'fileInfo.defaultAudioTrack' => 'Звукова пътека по подразбиране', + 'fileInfo.defaultSubtitleTrack' => 'Субтитри по подразбиране', + 'fileInfo.subtitlesOff' => 'Изкл.', + 'fileInfo.flagDefault' => 'По подразбиране', + 'fileInfo.flagForced' => 'Принудителни', + 'fileInfo.flagSelected' => 'Избран', + 'fileInfo.flagExternal' => 'Външен', + 'fileInfo.flagHearingImpaired' => 'За хора с увреден слух', + 'fileInfo.flagDub' => 'Дублаж', + 'fileInfo.flagOriginal' => 'Оригинал', 'mediaMenu.markAsWatched' => 'Маркирай като гледано', 'mediaMenu.markAsUnwatched' => 'Маркирай като негледано', 'mediaMenu.removeFromContinueWatching' => 'Премахни от продължаване на гледането', @@ -2580,7 +3095,28 @@ extension on TranslationsBg { 'mediaMenu.shufflePlay' => 'Разбъркано възпроизвеждане', 'mediaMenu.shuffleNotAvailableOffline' => 'Разбърканото възпроизвеждане не е налично офлайн', 'mediaMenu.fileInfo' => 'Информация за файла', + 'mediaMenu.deleteEpisodeFromServer' => 'Изтрий епизода от сървъра', + 'mediaMenu.deleteSeasonFromServer' => 'Изтрий сезона от сървъра', + 'mediaMenu.deleteShowFromServer' => 'Изтрий сериала от сървъра', + 'mediaMenu.deleteMovieFromServer' => 'Изтрий филма от сървъра', + 'mediaMenu.deleteEpisodeTitle' => 'Да изтрия ли този епизод?', + 'mediaMenu.deleteSeasonTitle' => 'Да изтрия ли този сезон?', + 'mediaMenu.deleteShowTitle' => 'Да изтрия ли този сериал?', + 'mediaMenu.deleteMovieTitle' => 'Да изтрия ли този филм?', + 'mediaMenu.deleteEpisodeConfirm' => 'Изтрий епизода', + 'mediaMenu.deleteSeasonConfirm' => 'Изтрий сезона', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Изтрий сериала', + 'mediaMenu.deleteMovieConfirm' => 'Изтрий филма', + 'mediaMenu.deleteAnyway' => 'Изтрий въпреки това', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Завинаги да изтрия ли ${title} от сървъра ви?', 'mediaMenu.deleteMultipleWarning' => 'Това включва всички епизоди и техните файлове.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: 'Това изтрива целия ${n} епизод в него, както и файла му.', other: 'Това изтрива всичките ${n} епизода в него, както и техните файлове.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: 'Този елемент се съхранява като ${n} файл, който ще бъде изтрит.', other: 'Този елемент се съхранява в ${n} файла и всички те ще бъдат изтрити.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: '${n} друг епизод се съхранява в същия файл и също ще бъде изтрит:', other: '${n} други епизода се съхраняват в същия файл и също ще бъдат изтрити:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy не успя да провери кои файлове ще бъдат премахнати, така че може да изтрие повече от посочения по-горе елемент. Откажете и опитайте отново, или изтрийте въпреки това.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Сървърът ви не предостави данни за файловете на този елемент, така че Plezy не може да провери кои файлове ще бъдат премахнати. Може да изтрие повече от посочения по-горе елемент.', 'mediaMenu.mediaDeletedSuccessfully' => 'Елементът е изтрит успешно', 'mediaMenu.mediaFailedToDelete' => 'Неуспешно изтриване на елемента', 'mediaMenu.rate' => 'Оцени', @@ -2646,6 +3182,9 @@ extension on TranslationsBg { 'videoControls.playNext' => 'Пусни следващото', 'videoControls.playButton' => 'Пусни', 'videoControls.pauseButton' => 'Пауза', + 'videoControls.playbackPaused' => 'На пауза', + 'videoControls.playbackResumed' => 'Възпроизвежда се', + 'videoControls.loadingVideo' => 'Зареждане на видеото', 'videoControls.showPlaybackControls' => 'Покажи контролите за възпроизвеждане', 'videoControls.hidePlaybackControls' => 'Скрий контролите за възпроизвеждане', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Превърти назад ${seconds} секунди', @@ -2700,8 +3239,6 @@ extension on TranslationsBg { 'videoControls.subtitleDownloaded' => 'Субтитърът е изтеглен', 'videoControls.subtitleDownloadedNotApplied' => 'Субтитрите са изтеглени, но не можаха да бъдат избрани', 'videoControls.subtitleDownloadFailed' => 'Неуспешно изтегляне на субтитър', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Търсене на езици...', 'messages.markedAsWatched' => 'Маркирано като гледано', 'messages.markedAsUnwatched' => 'Маркирано като негледано', @@ -2711,6 +3248,7 @@ extension on TranslationsBg { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: 'Автоматично премахнато ${n} гледано изтегляне', other: 'Автоматично премахнати ${n} гледани изтегляния', ), 'messages.removedFromContinueWatching' => 'Премахнато от продължаване на гледането', 'messages.errorLoading' => ({required Object error}) => 'Грешка: ${error}', + 'messages.searchPartialResults' => 'Някои медийни сървъри не можаха да бъдат претърсени. Показват се наличните резултати.', 'messages.streamInterrupted' => 'Потокът прекъсна. Натиснете „Пусни“ или превъртете, за да опитате отново.', 'messages.liveStreamInterrupted' => 'Потокът на живо прекъсна. Натиснете „Пусни“, за да опитате отново.', 'messages.fileInfoNotAvailable' => 'Информацията за файла не е налична', @@ -2749,6 +3287,8 @@ extension on TranslationsBg { 'messages.switchingToCompatiblePlayer' => 'Превключване към съвместим плейър...', 'messages.serverLimitTitle' => 'Възпроизвеждането е неуспешно', 'messages.serverLimitBody' => 'Грешка на сървъра (HTTP 500). Вероятно лимит за пропускателна способност/транскодиране е отхвърлил тази сесия. Помолете собственика да го коригира.', + 'messages.mediaUnreadableTitle' => 'Файлът е недостъпен', + 'messages.mediaUnreadableBody' => 'Сървърът намери този елемент, но не можа да прочете файла му (HTTP 404). Файлът вероятно е бил преместен, изтрит или хранилището му е офлайн. Помолете собственика на сървъра да провери файла и да сканира отново библиотеката.', 'messages.logsUploaded' => 'Логовете са качени', 'messages.logsUploadFailed' => 'Неуспешно качване на логовете', 'messages.logId' => 'ID на лога', @@ -2857,6 +3397,8 @@ extension on TranslationsBg { 'connections.sessionExpiredOne' => ({required Object name}) => 'Сесията за ${name} е изтекла', 'connections.sessionExpiredMany' => ({required Object count}) => 'Сесиите за ${count} сървъра са изтекли', 'connections.signInAgain' => 'Влез отново', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Редактирай връзката с ${product}', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Добавете или премахнете URL адреси за ${serverName}. Plezy ще използва достъпния URL адрес с най-ниска латентност.', 'discover.title' => 'Открий', 'discover.noContentAvailable' => 'Няма налично съдържание', 'discover.addMediaToLibraries' => 'Добавете медия към библиотеките си', @@ -2882,6 +3424,7 @@ extension on TranslationsBg { 'discover.minutesLeft' => ({required Object minutes}) => 'Остават ${minutes} мин', 'discover.moreLikeThis' => 'Подобно на това', 'errors.searchFailed' => ({required Object error}) => 'Търсенето е неуспешно: ${error}', + 'errors.searchUnavailable' => 'Търсенето не можа да достигне до нито един медиен сървър.', 'errors.connectionTimeout' => ({required Object context}) => 'Изтече времето за връзка при зареждане на ${context}', 'errors.connectionFailed' => 'Не може да се осъществи връзка с медиен сървър', 'errors.unableToLoad' => ({required Object context}) => 'Не може да се зареди ${context}. Опитайте отново.', @@ -2989,13 +3532,43 @@ extension on TranslationsBg { 'logs.clearLogs' => 'Изчисти логовете', 'logs.copyLogs' => 'Копирай логовете', 'logs.uploadLogs' => 'Качи логовете', + 'startup.failedTitle' => 'Plezy не можа да стартира', + 'startup.failedBody' => 'Нещо се обърка по време на стартирането. Детайлите по-долу показват какво е причинило грешката.', + 'startup.failedBodyRepairable' => 'Запазеният файл с настройки на Plezy е повреден и трябва да бъде възстановен, преди Plezy да стартира. Повторните опити няма да помогнат — изберете „Ремонт на хранилището“.', + 'startup.phaseLabel' => 'Стъпка', + 'startup.showDetails' => 'Покажи детайлите', + 'startup.hideDetails' => 'Скрий детайлите', + 'startup.copyDetails' => 'Копирай детайлите', + 'startup.detailsCopied' => 'Детайлите са копирани в клипборда', + 'startup.uploadDetails' => 'Качи детайлите', + 'startup.repairStorage' => 'Ремонт на хранилището', + 'startup.repairTitle' => 'Да ремонтирам ли съхранените данни?', + 'startup.repairBodyCommon' => 'Файлът с настройки на Plezy е повреден и не може да бъде прочетен. Ремонтът връща всяка настройка към стойността ѝ по подразбиране.', + 'startup.repairBodyOneCredential' => 'Един запис за вход е повреден и не може да бъде прочетен. Ремонтът премахва само него; останалите ви настройки не се пипат.', + 'startup.repairBodySignInsKept' => 'Сървърите и профилите ви трябва да останат вписани.', + 'startup.repairBodySignInsLost' => 'Ключът, защитаващ запазените ви вписвания, не може да бъде възстановен от този файл, така че ще трябва да се впишете отново във всеки сървър и профил. Нищо на медийния ви сървър не се засяга.', + 'startup.repairBodySessionsUncertain' => 'Трекърите (MAL, AniList, Simkl, Trakt) и Seerr се съхраняват отделно и може да оцелеят или не. Plezy ще ви каже точно какво е запазил.', + 'startup.repairConfirm' => 'Ремонтирай', + 'startup.repairSucceeded' => 'Хранилището е ремонтирано', + 'startup.repairNeedsRestart' => 'Хранилището е ремонтирано — изисква се рестартиране', + 'startup.restartRequiredBody' => 'Данните ви бяха ремонтирани, но Plezy трябва да стартира наново, преди да ги използва. Затворете Plezy и го отворете отново.', + 'startup.quitPlezy' => 'Изход от Plezy', + 'startup.repairFailed' => 'Ремонтът се провали', + 'startup.repairKeptSignIns' => 'Сървърите и профилите ви са все още вписани.', + 'startup.repairLostSignIns' => 'Ключът, защитаващ запазените ви вписвания, не можа да бъде възстановен. Ще трябва да се впишете отново във всеки сървър и профил.', + 'startup.repairLostSessions' => 'Поне една връзка с трекър или Seerr беше загубена и трябва да бъде възстановена.', + 'startup.backupTitle' => 'Запазено е копие на повредения файл', + 'startup.backupWarning' => 'То съдържа вашите данни за вписване. Не го качвайте и не го споделяйте.', + 'startup.deleteBackup' => 'Изтрий копието', + 'startup.backupDeleted' => 'Копието е изтрито.', + 'startup.previousFailureTitle' => 'Plezy не успя да стартира последния път', 'licenses.relatedPackages' => 'Свързани пакети', 'licenses.license' => 'Лиценз', 'licenses.licenseNumber' => ({required Object number}) => 'Лиценз ${number}', 'licenses.licensesCount' => ({required Object count}) => '${count} лиценза', 'navigation.libraries' => 'Библиотеки', 'navigation.downloads' => 'Изтегляния', - 'navigation.liveTv' => 'Телевизия на живо', + 'navigation.liveTv' => 'TV на живо', 'navigation.explore' => 'Разгледай', 'explore.title' => 'Разгледай', 'explore.selectSource' => 'Избери източник', @@ -3032,6 +3605,113 @@ extension on TranslationsBg { 'explore.searchEmpty' => ({required Object query}) => 'Няма резултати за "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Търси филми и сериали в ${source}.', 'explore.searchFailed' => 'Търсенето се провали. Провери връзката си и опитай отново.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} популярен', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} в ефир', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} оценен', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} най-харесван', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} в тенденция', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} през ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} гледат', + 'explore.badge.available' => 'Наличен', + 'explore.badge.partiallyAvailable' => 'Частично наличен', + 'explore.badge.availableIn4k' => 'Наличен в 4K', + 'explore.badge.requested' => 'Заявен', + 'explore.badge.pendingApproval' => 'В очакване на одобрение', + 'explore.badge.processing' => 'Обработва се', + 'explore.badge.declined' => 'Отхвърлен', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Заявката се провали', + 'explore.badge.requested4k' => 'Заявен в 4K', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} сезона', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Еп. ${episode} след ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Следващ след ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} еп.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} мин/еп', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} в списък', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} гледали днес', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} гледали тази седмица', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} гледали този месец', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} гледали тази година', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} зрители', + 'explore.stats.planning' => ({required Object n}) => '${n} планират да гледат', + 'explore.stats.favorited' => ({required Object n}) => '${n} в любими', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} го изоставиха', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: '${n} коментар', other: '${n} коментара', ), + 'explore.stats.votes' => ({required Object n}) => '${n} гласа', + 'explore.stats.watching' => ({required Object n}) => '${n} го гледат', + 'explore.stats.completed' => ({required Object n}) => '${n} завършили', + 'explore.stats.onHold' => ({required Object n}) => '${n} на пауза', + 'explore.stats.dropped' => ({required Object n}) => '${n} изоставили', + 'explore.season.winter' => 'Зима', + 'explore.season.spring' => 'Пролет', + 'explore.season.summer' => 'Лято', + 'explore.season.fall' => 'Есен', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'ТВ', + 'explore.format.tvShort' => 'ТВ късометражен', + 'explore.format.movie' => 'Филм', + 'explore.format.special' => 'Специален', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Музика', + 'explore.format.other' => 'Друго', + 'explore.sourceMaterial.original' => 'Оригинал', + 'explore.sourceMaterial.manga' => 'Манга', + 'explore.sourceMaterial.lightNovel' => 'Лайт новела', + 'explore.sourceMaterial.novel' => 'Роман', + 'explore.sourceMaterial.visualNovel' => 'Визуална новела', + 'explore.sourceMaterial.game' => 'Игра', + 'explore.sourceMaterial.webComic' => 'Уеб комикс', + 'explore.sourceMaterial.musicRelease' => 'Музика', + 'explore.sourceMaterial.otherMedia' => 'Друго', + 'explore.creditRole.director' => 'Режисьор', + 'explore.creditRole.writer' => 'Сценарист', + 'explore.creditRole.producer' => 'Продуцент', + 'explore.creditRole.creator' => 'Създател', + 'explore.creditRole.composer' => 'Композитор', + 'explore.relation.prequel' => 'Приквел', + 'explore.relation.sequel' => 'Сиквел', + 'explore.relation.sideStory' => 'Странична история', + 'explore.relation.spinOff' => 'Спин-оф', + 'explore.relation.alternativeVersion' => 'Алтернативна версия', + 'explore.relation.summary' => 'Резюме', + 'explore.relation.parentStory' => 'Основна история', + 'explore.relation.adaptation' => 'Адаптация', + 'explore.relation.other' => 'Свързано', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Излъчва се в ${day} от ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Излъчва се в ${day} от ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Оригинално заглавие', + 'explore.detail.alsoKnownAs' => 'Известен също като', + 'explore.detail.studios' => 'Студия', + 'explore.detail.country' => 'Държава', + 'explore.detail.language' => 'Език', + 'explore.detail.released' => 'Излязъл', + 'explore.detail.physicalRelease' => 'На диск', + 'explore.detail.ended' => 'Приключил', + 'explore.detail.addedOn' => ({required Object date}) => 'Добавен на ${date}', + 'explore.detail.yourRating' => 'Вашата оценка', + 'explore.detail.budget' => 'Бюджет', + 'explore.detail.revenue' => 'Боксофис', + 'explore.detail.contentAdvisory' => 'Възрастова препоръка', + 'explore.detail.tags' => 'Етикети', + 'explore.detail.revealSpoilerTags' => 'Покажи етикетите за спойлери', + 'explore.detail.links' => 'Връзки', + 'explore.detail.watchOn' => 'Гледай в', + 'explore.detail.watchTrailer' => 'Гледай трейлъра', + 'explore.detail.openOn' => ({required Object site}) => 'Отвори в ${site}', + 'explore.detail.crew' => 'Екип', + 'explore.detail.ratings' => 'Оценки', + 'explore.detail.schedule' => 'Програма', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: 'Препоръчан от ${n} потребител', other: 'Препоръчан от ${n} потребители', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Препоръчан от ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'В любими от ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} все още не са излъчени', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Препоръчан от ${percent} от зрителите', + 'explore.detail.relatedTitles' => 'Свързани заглавия', + 'explore.detail.background' => 'Фон', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: '${n} резултат', other: '${n} резултата', ), 'liveTv.title' => 'Телевизия на живо', 'liveTv.guide' => 'ТВ програма', 'liveTv.noChannels' => 'Няма налични канали', @@ -3214,8 +3894,6 @@ extension on TranslationsBg { 'watchTogether.relayUnreachable' => 'Релейният сървър е недостъпен. Възможно е интернет доставчикът да блокира гледането заедно.', 'watchTogether.reconnectingToHost' => 'Повторно свързване с организатора...', 'watchTogether.currentPlayback' => 'Текущо възпроизвеждане', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Присъедини се към текущото възпроизвеждане', 'watchTogether.joinCurrentPlaybackDescription' => 'Върнете се към това, което организаторът гледа в момента', 'watchTogether.failedToOpenCurrentPlayback' => 'Неуспешно отваряне на текущото възпроизвеждане', @@ -3284,9 +3962,15 @@ extension on TranslationsBg { 'downloads.editSyncRule' => 'Редактирай правило за синхронизация', 'downloads.removeSyncRule' => 'Премахни правило за синхронизация', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Да се спре ли синхронизацията за "${title}"? Изтеглените епизоди ще останат.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Да спра ли синхронизирането на „${title}“?', + 'downloads.deleteSyncRuleDownloads' => 'Изтрий и свързаните изтегляния', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Изтеглянията, използвани от друго правило за синхронизация или профил, ще бъдат запазени.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Правилото за синхронизация е създадено — запазват се ${count} негледани епизода', 'downloads.syncRuleUpdated' => 'Правилото за синхронизация е обновено', 'downloads.syncRuleRemoved' => 'Правилото за синхронизация е премахнато', + 'downloads.syncRuleAndDownloadsRemoved' => 'Правилото за синхронизация и свързаните изтегляния са премахнати', + 'downloads.syncRuleCleanupBusy' => 'Правилата за синхронизация в момента се обновяват. Опитайте отново след малко.', + 'downloads.syncRuleCleanupUnavailable' => 'Свързаните изтегляния не можаха да бъдат идентифицирани безопасно. Свържете се отново със сървъра и опитайте отново, или премахнете правилото, без да изтривате изтеглянията.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => 'Синхронизирани са ${count} нови епизода за ${title}', 'downloads.activeSyncRules' => 'Правила за синхронизация', 'downloads.noSyncRules' => 'Няма правила за синхронизация', @@ -3449,6 +4133,8 @@ extension on TranslationsBg { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Средно DV RPU', 'performanceOverlay.dvSampleAverage' => 'Средно DV семпл', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Макс. яркост', 'performanceOverlay.minLuma' => 'Мин. яркост', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsBg { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Активиране на Plezy в ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Посетете ${url} и въведете този код:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Отворете ${service}, за да активирате', @@ -3641,9 +4328,12 @@ extension on TranslationsBg { 'services.libraryFilter.modeHintWhitelist' => 'Синхронизирай само отметнатите по-долу библиотеки.', 'services.libraryFilter.libraries' => 'Библиотеки', 'services.libraryFilter.noLibraries' => 'Няма налични библиотеки', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Добави ${product} сървър', 'addServer.serverUrls' => 'URL адреси на сървъра', 'addServer.serverUrlsHelper' => 'Позволени са няколко URL адреса, разделени със запетаи.', 'addServer.findServer' => 'Намери сървър', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Търсене на локални ${product} сървъри...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Локални ${product} сървъри', 'addServer.username' => 'Потребителско име', 'addServer.password' => 'Парола', 'addServer.signIn' => 'Вход', @@ -3655,11 +4345,15 @@ extension on TranslationsBg { 'addServer.addPlexTitle' => 'Вход с Plex', 'addServer.pinExpired' => 'PIN-ът изтече преди вход. Моля, опитайте отново.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Неуспешна регистрация на акаунт: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Въведете URL адреса на вашия ${product} сървър', 'addServer.addConnectionTitle' => 'Добави връзка', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Добави към ${name}', 'addServer.signInWithPlexCard' => 'Вход с Plex', 'addServer.signInWithPlexCardSubtitle' => 'Удостоверете това устройство. Споделените сървъри се добавят.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Удостоверете Plex акаунт. Домашните потребители стават профили.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Свържи се с ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Въведете URL адреса на сървъра, потребителското име и паролата.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Впишете се в своя ${product} сървър. Обвързва се с ${name}.', 'addServer.borrowFromAnotherProfile' => 'Използвай от друг профил', 'addServer.borrowFromAnotherProfileSubtitle' => 'Използвай връзка от друг профил. PIN-защитените профили изискват PIN.', _ => null, diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index a0c8b226..7b2c9d49 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -67,6 +67,7 @@ class TranslationsDa extends Translations with BaseTranslations 'Venter på godkendelse...\nLog ind fra din browser.'; @override String get useBrowser => 'Brug browseren'; @override String get or => 'eller'; + @override String connectToMediaBrowser({required Object product}) => 'Opret forbindelse til ${product}'; @override String get useQuickConnect => 'Brug Quick Connect'; @override String get quickConnectInstructions => 'Åbn Quick Connect i Jellyfin, og indtast denne kode.'; @override String get quickConnectWaiting => 'Venter på godkendelse…'; @@ -175,6 +177,7 @@ class _Translations$common$da extends Translations$common$en { @override String get fullscreen => 'Fuldskærm'; @override String get exitFullscreen => 'Forlad fuldskærm'; @override String get pressBackAgainToExit => 'Tryk på tilbage igen for at afslutte'; + @override late final _Translations$common$ratingSource$da ratingSource = _Translations$common$ratingSource$da._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$da extends Translations$settings$en { @override String get darkTheme => 'Mørk'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Bibliotekstæthed'; + @override String get displayScale => 'Skalering'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Komfortabel'; @override String get tvCornerSpotlightBackdrop => 'Fremhævet baggrundsbillede i hjørnet'; @@ -287,6 +291,11 @@ class _Translations$settings$da extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => 'Automatisk (anbefalet)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} MB hukommelse tilgængelig. En buffer på ${size} MB kan påvirke afspilningen.'; + @override String get playbackBuffer => 'Afspilningsbuffer'; + @override String get playbackBufferAuto => 'Auto (anbefalet)'; + @override String get playbackBufferLarge => 'Stor'; + @override String get playbackBufferExtraLarge => 'Ekstra stor'; + @override String get playbackBufferDescription => 'Bufrer mere mod ustabile forbindelser. Begrænses også af bufferstørrelsen.'; @override String get defaultQualityTitle => 'Standardkvalitet'; @override String get musicQualityTitle => 'Musikkvalitet'; @override String get subtitleStyling => 'Undertekststil'; @@ -320,6 +329,9 @@ class _Translations$settings$da extends Translations$settings$en { @override String get debugLoggingDescription => 'Aktiver detaljeret logning til fejlfinding'; @override String get viewLogs => 'Vis logfiler'; @override String get viewLogsDescription => 'Vis programmets logfiler'; + @override String get clearImageCache => 'Ryd billedcache'; + @override String get clearImageCacheDescription => 'Ryd cachelagrede covers og thumbnails. Billeder kan indlæse langsommere, indtil de downloades igen.'; + @override String get clearImageCacheSuccess => 'Billedcachen er ryddet'; @override String get resetSettings => 'Nulstil indstillinger'; @override String get resetSettingsDescription => 'Gendan standardindstillinger. Dette kan ikke fortrydes.'; @override String get resetSettingsSuccess => 'Indstillinger nulstillet'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$da extends Translations$fileInfo$en { // Translations @override String get title => 'Filinfo'; + @override String get overview => 'Oversigt'; @override String get video => 'Video'; @override String get audio => 'Lyd'; @override String get subtitles => 'Undertekster'; + @override String get images => 'Indlejrede billeder'; + @override String get dataStreams => 'Datastrømme'; + @override String get lyrics => 'Tekster'; @override String get file => 'Fil'; + @override String get attachments => 'Vedhæftninger'; + @override String get delivery => 'Levering'; + @override String versionCounter({required Object index, required Object count}) => 'Version ${index} af ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Fil ${index} af ${count}'; + @override String get noStreams => 'Serveren rapporterede ingen strømme for denne fil.'; + @override String get copyPath => 'Kopiér sti'; + @override String get pathCopied => 'Filstien er kopieret'; @override String get codec => 'Codec'; + @override String get codecTag => 'Codec-tag'; @override String get resolution => 'Opløsning'; + @override String get codedResolution => 'Kodet opløsning'; @override String get bitrate => 'Bitrate'; @override String get frameRate => 'Billedhastighed'; + @override String get rotation => 'Rotation'; + @override String get comment => 'Kommentar'; + @override String get audioDescription => 'Lydbeskrivelse'; + @override String get headerCompression => 'Headerkomprimering'; + @override String get sidecarFile => 'Sidecar-fil'; + @override String get transportTimestamp => 'Transporttidsstempel'; + @override String get displayOffset => 'Visningsforskydning'; + @override String get previewFailureCode => 'Preview-fejlkode'; + @override String get previewRetries => 'Preview-forsøg'; @override String get aspectRatio => 'Billedformat'; + @override String get pixelAspectRatio => 'Pixel-billedformat'; @override String get profile => 'Profil'; + @override String get level => 'Niveau'; @override String get bitDepth => 'Bitdybde'; + @override String get pixelFormat => 'Pixelformat'; @override String get colorSpace => 'Farverum'; @override String get colorRange => 'Farveområde'; @override String get colorPrimaries => 'Farveprimærer'; + @override String get colorTransfer => 'Farveoverførsel'; @override String get chromaSubsampling => 'Chroma-subsampling'; + @override String get chromaLocation => 'Chroma-placering'; + @override String get scanType => 'Scanningstype'; + @override String get interlaced => 'Interlaced'; + @override String get anamorphic => 'Anamorfisk'; + @override String get referenceFrames => 'Referenceframes'; + @override String get dynamicRange => 'Dynamisk område'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision-niveau'; + @override String get dolbyVisionVersion => 'Dolby Vision-version'; + @override String get dolbyVisionLayers => 'Dolby Vision-lag'; + @override String get baseLayerCompatibility => 'Basislagskompatibilitet'; + @override String get avcBitstream => 'AVC-bitstrøm'; + @override String get nalLengthSize => 'NAL-længdestørrelse'; + @override String get scalingMatrix => 'Brugerdefineret skaleringsmatrix'; + @override String get streamIdentifier => 'Strømidentifikator'; + @override String get streamIndex => 'Strømindex'; + @override String get streamId => 'Strøm-ID'; + @override String get language => 'Sprog'; + @override String get languageCode => 'Sprogkode'; + @override String get streamTitle => 'Sportitel'; @override String get channels => 'Kanaler'; + @override String get sampleRate => 'Samplingshastighed'; + @override String get spatialAudio => 'Rumlig lyd'; + @override String get textBased => 'Tekstbaseret'; + @override String get subtitleFormat => 'Sidecar-format'; + @override String get provider => 'Udbydder'; + @override String get matchScore => 'Matchscore'; + @override String get externalDelivery => 'Kan leveres separat'; + @override String get sidecarPath => 'Sidecar-sti'; + @override String get sourceStream => 'Kopieret fra'; + @override String get temporary => 'Midlertidig'; + @override String get timeBase => 'Tidsbase'; @override String get overallBitrate => 'Samlet bitrate'; @override String get path => 'Sti'; + @override String get fileName => 'Filnavn'; @override String get size => 'Størrelse'; + @override String get totalSize => 'Samlet størrelse'; @override String get container => 'Container'; @override String get duration => 'Varighed'; + @override String get previewThumbnails => 'Preview-thumbnails'; + @override String get previewIndex => 'Preview-index'; + @override String get packetLength => 'Pakkelængde'; + @override String get filePresent => 'Fil til stede'; + @override String get fileReadable => 'Læsbar af serveren'; + @override String get streamPath => 'Strømsti'; @override String get optimizedForStreaming => 'Optimeret til streaming'; @override String get has64bitOffsets => '64-bit-forskydninger'; + @override String get protocol => 'Protokol'; + @override String get mediaType => 'Medietype'; + @override String get sourceKind => 'Kildetype'; + @override String get optimizedVersion => 'Optimeret version'; + @override String get optimizationTarget => 'Optimeringsmål'; + @override String get deletedAt => 'Slettet'; + @override String get remoteSource => 'Fjernkilde'; + @override String get infiniteStream => 'Uendelig strøm'; + @override String get directPlay => 'Direkte afspilning'; + @override String get directStream => 'Direkte strømning'; + @override String get transcoding => 'Transkodning'; + @override String get etag => 'ETag'; + @override String get versionId => 'Versions-ID'; + @override String get fileId => 'Fil-ID'; + @override String get defaultAudioTrack => 'Standard lydspor'; + @override String get defaultSubtitleTrack => 'Standard undertekstspor'; + @override String get subtitlesOff => 'Fra'; + @override String get flagDefault => 'Standard'; + @override String get flagForced => 'Tvunget'; + @override String get flagSelected => 'Valgt'; + @override String get flagExternal => 'Ekstern'; + @override String get flagHearingImpaired => 'Hørehæmmede'; + @override String get flagDub => 'Dub'; + @override String get flagOriginal => 'Original'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$da extends Translations$mediaMenu$en { @override String get shufflePlay => 'Afspil tilfældigt'; @override String get shuffleNotAvailableOffline => 'Tilfældig afspilning er ikke tilgængelig offline'; @override String get fileInfo => 'Filinfo'; + @override String get deleteEpisodeFromServer => 'Slet episode fra serveren'; + @override String get deleteSeasonFromServer => 'Slet sæson fra serveren'; + @override String get deleteShowFromServer => 'Slet TV-serie fra serveren'; + @override String get deleteMovieFromServer => 'Slet film fra serveren'; + @override String get deleteEpisodeTitle => 'Slet denne episode?'; + @override String get deleteSeasonTitle => 'Slet denne sæson?'; + @override String get deleteShowTitle => 'Slet denne TV-serie?'; + @override String get deleteMovieTitle => 'Slet denne film?'; + @override String get deleteEpisodeConfirm => 'Slet episode'; + @override String get deleteSeasonConfirm => 'Slet sæson'; + @override String get deleteShowConfirm => 'Slet TV-serie'; + @override String get deleteMovieConfirm => 'Slet film'; + @override String get deleteAnyway => 'Slet alligevel'; + @override String confirmDeleteTarget({required Object title}) => 'Slet ${title} permanent fra din server?'; @override String get deleteMultipleWarning => 'Dette inkluderer alle episoder og deres filer.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: 'Dette sletter alle ${n} episode i den og dens fil.', + other: 'Dette sletter alle ${n} episoder i den og deres filer.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: 'Dette emne er gemt som ${n} fil, som vil blive slettet.', + other: 'Dette emne er gemt på tværs af ${n} filer, og alle vil blive slettet.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: '${n} anden episode er gemt i samme fil og vil også blive slettet:', + other: '${n} andre episoder er gemt i samme fil og vil også blive slettet:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy kunne ikke kontrollere, hvilke filer dette vil fjerne, så det kan slette mere end det ovennævnte emne. Annuller og prøv igen, eller slet alligevel.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Din server leverede ikke filoplysninger for dette emne, så Plezy kan ikke kontrollere, hvilke filer dette vil fjerne. Det kan slette mere end det ovennævnte emne.'; @override String get mediaDeletedSuccessfully => 'Mediet blev slettet'; @override String get mediaFailedToDelete => 'Mediet kunne ikke slettes'; @override String get rate => 'Bedøm'; @@ -657,6 +786,9 @@ class _Translations$videoControls$da extends Translations$videoControls$en { @override String get playNext => 'Afspil næste'; @override String get playButton => 'Afspil'; @override String get pauseButton => 'Pause'; + @override String get playbackPaused => 'Pauseret'; + @override String get playbackResumed => 'Afspiller'; + @override String get loadingVideo => 'Indlæser video'; @override String get showPlaybackControls => 'Vis afspilningsknapper'; @override String get hidePlaybackControls => 'Skjul afspilningsknapper'; @override String seekBackwardButton({required Object seconds}) => 'Spol ${seconds} sekunder tilbage'; @@ -726,6 +858,7 @@ class _Translations$messages$da extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Fjernet fra Fortsæt med at se'; @override String errorLoading({required Object error}) => 'Fejl: ${error}'; + @override String get searchPartialResults => 'Nogle medieservere kunne ikke søges i. Viser tilgængelige resultater.'; @override String get streamInterrupted => 'Streamen blev afbrudt. Tryk på afspil, eller spol for at prøve igen.'; @override String get liveStreamInterrupted => 'Livestreamen blev afbrudt. Tryk på afspil for at prøve igen.'; @override String get fileInfoNotAvailable => 'Filinfo ikke tilgængelig'; @@ -764,6 +897,8 @@ class _Translations$messages$da extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Skifter til kompatibel afspiller...'; @override String get serverLimitTitle => 'Afspilning mislykkedes'; @override String get serverLimitBody => 'Serverfejl (HTTP 500). En båndbredde- eller transkodningsgrænse afviste sandsynligvis sessionen. Bed ejeren om at justere den.'; + @override String get mediaUnreadableTitle => 'Fil utilgængelig'; + @override String get mediaUnreadableBody => 'Serveren fandt dette emne, men kunne ikke læse filen (HTTP 404). Filen er sandsynligvis flyttet, slettet, eller dens lager er offline. Bed serverejeren om at kontrollere filen og scanne biblioteket igen.'; @override String get logsUploaded => 'Logfilerne blev uploadet'; @override String get logsUploadFailed => 'Logfilerne kunne ikke uploades'; @override String get logId => 'Log-ID'; @@ -917,6 +1052,8 @@ class _Translations$connections$da extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sessionen er udløbet for ${name}'; @override String sessionExpiredMany({required Object count}) => 'Sessionerne er udløbet for ${count} servere'; @override String get signInAgain => 'Log ind igen'; + @override String editMediaBrowserTitle({required Object product}) => 'Rediger ${product}-forbindelse'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Tilføj eller fjern URL\'er for ${serverName}. Plezy bruger den tilgængelige URL med laveste latenstid.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$da extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Søgning mislykkedes: ${error}'; + @override String get searchUnavailable => 'Søgningen kunne ikke nå nogen medieserver.'; @override String connectionTimeout({required Object context}) => 'Forbindelsen fik timeout under indlæsning af ${context}'; @override String get connectionFailed => 'Kan ikke oprette forbindelse til medieserver'; @override String unableToLoad({required Object context}) => 'Kunne ikke indlæse ${context}. Prøv igen.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$da extends Translations$logs$en { @override String get uploadLogs => 'Upload logfiler'; } +// Path: startup +class _Translations$startup$da extends Translations$startup$en { + _Translations$startup$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy kunne ikke starte'; + @override String get failedBody => 'Der gik noget galt under opstart. Oplysningerne nedenfor viser, hvad der gik galt.'; + @override String get failedBodyRepairable => 'Plezy\'s gemte indstillingsfil er beskadiget og skal genopbygges, før Plezy kan starte. Det hjælper ikke at prøve igen — vælg Reparer lager.'; + @override String get phaseLabel => 'Trin'; + @override String get showDetails => 'Vis detaljer'; + @override String get hideDetails => 'Skjul detaljer'; + @override String get copyDetails => 'Kopiér detaljer'; + @override String get detailsCopied => 'Detaljer kopieret til udklipsholder'; + @override String get uploadDetails => 'Upload detaljer'; + @override String get repairStorage => 'Reparer lager'; + @override String get repairTitle => 'Reparer gemte data?'; + @override String get repairBodyCommon => 'Plezy\'s indstillingsfil er beskadiget og kan ikke læses. Reparation nulstiller alle indstillinger til deres standardværdier.'; + @override String get repairBodyOneCredential => 'Én gemt loginoplysning er beskadiget og kan ikke læses. Reparation fjerner kun den; dine andre indstillinger forbliver urørt.'; + @override String get repairBodySignInsKept => 'Dine servere og profiler bør forblive logget ind.'; + @override String get repairBodySignInsLost => 'Nøglen, der beskytter dine gemte loginoplysninger, kan ikke gendannes fra denne fil, så du skal logge ind på alle servere og profiler igen. Intet på din medieserver er påvirket.'; + @override String get repairBodySessionsUncertain => 'Trackere (MAL, AniList, Simkl, Trakt) og Seerr gemmes separat, og det er uvist, om de overlever. Plezy fortæller dig præcis, hvad det beholdt.'; + @override String get repairConfirm => 'Reparer'; + @override String get repairSucceeded => 'Lager repareret'; + @override String get repairNeedsRestart => 'Lager repareret — genstart påkrævet'; + @override String get restartRequiredBody => 'Dine data er blevet repareret, men Plezy skal starte på ny, før det kan bruge dem. Luk Plezy, og åbn det igen.'; + @override String get quitPlezy => 'Afslut Plezy'; + @override String get repairFailed => 'Reparation mislykkedes'; + @override String get repairKeptSignIns => 'Dine servere og profiler er stadig logget ind.'; + @override String get repairLostSignIns => 'Nøglen, der beskytter dine gemte loginoplysninger, kunne ikke gendannes. Du skal logge ind på alle servere og profiler igen.'; + @override String get repairLostSessions => 'Mindst én tracker- eller Seerr-forbindelse gik tabt og skal genetableres.'; + @override String get backupTitle => 'En kopi af den beskadigede fil blev gemt'; + @override String get backupWarning => 'Den indeholder dine loginoplysninger. Upload eller del den ikke.'; + @override String get deleteBackup => 'Slet kopi'; + @override String get backupDeleted => 'Kopi slettet.'; + @override String get previousFailureTitle => 'Plezy kunne ikke starte sidste gang'; +} + // Path: licenses class _Translations$licenses$da extends Translations$licenses$en { _Translations$licenses$da._(TranslationsDa root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$da extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Ingen resultater for "${query}"'; @override String searchPrompt({required Object source}) => 'Søg efter film og serier på ${source}.'; @override String get searchFailed => 'Søgningen mislykkedes. Tjek din forbindelse, og prøv igen.'; + @override late final _Translations$explore$badge$da badge = _Translations$explore$badge$da._(_root); + @override late final _Translations$explore$stats$da stats = _Translations$explore$stats$da._(_root); + @override late final _Translations$explore$season$da season = _Translations$explore$season$da._(_root); + @override late final _Translations$explore$format$da format = _Translations$explore$format$da._(_root); + @override late final _Translations$explore$sourceMaterial$da sourceMaterial = _Translations$explore$sourceMaterial$da._(_root); + @override late final _Translations$explore$creditRole$da creditRole = _Translations$explore$creditRole$da._(_root); + @override late final _Translations$explore$relation$da relation = _Translations$explore$relation$da._(_root); + @override String broadcast({required Object day, required Object time}) => 'Sendes ${day} kl. ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Sendes ${day} kl. ${time} ${timezone}'; + @override late final _Translations$explore$detail$da detail = _Translations$explore$detail$da._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: '${n} resultat', + other: '${n} resultater', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$da extends Translations$downloads$en { @override String get editSyncRule => 'Rediger synkroniseringsregel'; @override String get removeSyncRule => 'Fjern synkroniseringsregel'; @override String removeSyncRuleConfirm({required Object title}) => 'Stop synkronisering af "${title}"? Downloadede episoder beholdes.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Stop synkronisering af "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Slet også tilknyttede downloads'; + @override String get deleteSyncRuleDownloadsDescription => 'Downloads, der bruges af en anden synkroniseringsregel eller profil, beholdes.'; @override String syncRuleCreated({required Object count}) => 'Synkroniseringsregel oprettet — beholder ${count} usete episoder'; @override String get syncRuleUpdated => 'Synkroniseringsregel opdateret'; @override String get syncRuleRemoved => 'Synkroniseringsregel fjernet'; + @override String get syncRuleAndDownloadsRemoved => 'Synkroniseringsregel og tilknyttede downloads fjernet'; + @override String get syncRuleCleanupBusy => 'Synkroniseringsregler opdateres lige nu. Prøv igen om et øjeblik.'; + @override String get syncRuleCleanupUnavailable => 'Tilknyttede downloads kunne ikke identificeres sikkert. Genopret forbindelse til serveren og prøv igen, eller fjern reglen uden at slette downloads.'; @override String syncedNewEpisodes({required Object count, required Object title}) => 'Synkroniserede ${count} nye episoder for ${title}'; @override String get activeSyncRules => 'Synkroniseringsregler'; @override String get noSyncRules => 'Ingen synkroniseringsregler'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$da extends Translations$addServer$en { final TranslationsDa _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Tilføj ${product}-server'; @override String get serverUrls => 'Server-URL\'er'; @override String get serverUrlsHelper => 'Du kan angive flere URL\'er adskilt med komma.'; @override String get findServer => 'Find server'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Leder efter lokale ${product}-servere...'; + @override String localMediaBrowserServers({required Object product}) => 'Lokale ${product}-servere'; @override String get username => 'Brugernavn'; @override String get password => 'Adgangskode'; @override String get signIn => 'Log ind'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$da extends Translations$addServer$en { @override String get addPlexTitle => 'Log ind med Plex'; @override String get pinExpired => 'PIN-koden udløb før login. Prøv igen.'; @override String failedToRegisterAccount({required Object error}) => 'Kunne ikke registrere kontoen: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Indtast din ${product}-server-URL'; @override String get addConnectionTitle => 'Tilføj forbindelse'; @override String addConnectionTitleScoped({required Object name}) => 'Tilføj til ${name}'; @override String get signInWithPlexCard => 'Log ind med Plex'; @override String get signInWithPlexCardSubtitle => 'Godkend denne enhed. Delte servere tilføjes.'; @override String get signInWithPlexCardSubtitleScoped => 'Godkend en Plex-konto. Plex Home-brugere bliver til profiler.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Opret forbindelse til ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Indtast din server-URL, brugernavn og adgangskode.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Log ind på din ${product}-server. Tilknyttes til ${name}.'; @override String get borrowFromAnotherProfile => 'Lån fra en anden profil'; @override String get borrowFromAnotherProfileSubtitle => 'Genbrug en anden profils forbindelse. PIN-beskyttede profiler kræver en PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$da extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get critic => 'Anmeldere'; + @override String get audience => 'Publikum'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes-anmeldere'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes-publikum'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$da extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$da._(TranslationsDa root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$da extends Translations$explore$status$en { @override String get upcoming => 'Kommende'; } +// Path: explore.badge +class _Translations$explore$badge$da extends Translations$explore$badge$en { + _Translations$explore$badge$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} populær'; + @override String rankAiring({required Object n}) => '#${n} på luften'; + @override String rankRated({required Object n}) => '#${n} bedømt'; + @override String rankFavorited({required Object n}) => '#${n} favorit'; + @override String rankTrending({required Object n}) => '#${n} populær lige nu'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} i ${season}'; + @override String watchingNow({required Object n}) => '${n} ser med'; + @override String get available => 'Tilgængelig'; + @override String get partiallyAvailable => 'Delvist tilgængelig'; + @override String get availableIn4k => '4K tilgængelig'; + @override String get requested => 'Anmodet'; + @override String get pendingApproval => 'Afventer godkendelse'; + @override String get processing => 'Behandles'; + @override String get declined => 'Afvist'; + @override String get requestFailed => 'Anmodningen mislykkedes'; + @override String get requested4k => '4K anmodet'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} sæsoner'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Afsnit ${episode} om ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Næste om ${duration}'; + @override String episodesShort({required Object n}) => '${n} afsnit'; + @override String minutesPerEpisode({required Object n}) => '${n} min/afsnit'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$da extends Translations$explore$stats$en { + _Translations$explore$stats$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} opført'; + @override String viewersDay({required Object n}) => '${n} så det i dag'; + @override String viewersWeek({required Object n}) => '${n} så det denne uge'; + @override String viewersMonth({required Object n}) => '${n} så det denne måned'; + @override String viewersYear({required Object n}) => '${n} så det i år'; + @override String viewersAllTime({required Object n}) => '${n} seere'; + @override String planning({required Object n}) => '${n} planlægger at se det'; + @override String favorited({required Object n}) => '${n} favoritter'; + @override String dropRate({required Object percent}) => '${percent} droppede det'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: '${n} kommentar', + other: '${n} kommentarer', + ); + @override String votes({required Object n}) => '${n} stemmer'; + @override String watching({required Object n}) => '${n} ser det'; + @override String completed({required Object n}) => '${n} færdigset'; + @override String onHold({required Object n}) => '${n} på pause'; + @override String dropped({required Object n}) => '${n} droppede'; +} + +// Path: explore.season +class _Translations$explore$season$da extends Translations$explore$season$en { + _Translations$explore$season$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get winter => 'Vinter'; + @override String get spring => 'Forår'; + @override String get summer => 'Sommer'; + @override String get fall => 'Efterår'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$da extends Translations$explore$format$en { + _Translations$explore$format$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV-kort'; + @override String get movie => 'Film'; + @override String get special => 'Special'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musik'; + @override String get other => 'Andet'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$da extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get original => 'Original'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Spil'; + @override String get webComic => 'Webtegneserie'; + @override String get musicRelease => 'Musik'; + @override String get otherMedia => 'Andet'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$da extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get director => 'Instruktør'; + @override String get writer => 'Forfatter'; + @override String get producer => 'Producer'; + @override String get creator => 'Skaber'; + @override String get composer => 'Komponist'; +} + +// Path: explore.relation +class _Translations$explore$relation$da extends Translations$explore$relation$en { + _Translations$explore$relation$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Sequel'; + @override String get sideStory => 'Bihistorie'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternativ version'; + @override String get summary => 'Resumé'; + @override String get parentStory => 'Hovedhistorie'; + @override String get adaptation => 'Adaption'; + @override String get other => 'Relateret'; +} + +// Path: explore.detail +class _Translations$explore$detail$da extends Translations$explore$detail$en { + _Translations$explore$detail$da._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Originaltitel'; + @override String get alsoKnownAs => 'Også kendt som'; + @override String get studios => 'Studier'; + @override String get country => 'Land'; + @override String get language => 'Sprog'; + @override String get released => 'Udgivet'; + @override String get physicalRelease => 'På disk'; + @override String get ended => 'Afsluttet'; + @override String addedOn({required Object date}) => 'Tilføjet ${date}'; + @override String get yourRating => 'Din bedømmelse'; + @override String get budget => 'Budget'; + @override String get revenue => 'Billetindtægter'; + @override String get contentAdvisory => 'Aldersvejledning'; + @override String get tags => 'Tags'; + @override String get revealSpoilerTags => 'Vis spoilertags'; + @override String get links => 'Links'; + @override String get watchOn => 'Se på'; + @override String get watchTrailer => 'Se trailer'; + @override String openOn({required Object site}) => 'Åbn på ${site}'; + @override String get crew => 'Crew'; + @override String get ratings => 'Bedømmelser'; + @override String get schedule => 'Program'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: 'Anbefalet af ${n} bruger', + other: 'Anbefalet af ${n} brugere', + ); + @override String recommendedBy({required Object who}) => 'Anbefalet af ${who}'; + @override String favoritedBy({required Object who}) => 'Favorit hos ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} ikke sendt endnu'; + @override String recommendedByPercent({required Object percent}) => 'Anbefalet af ${percent} af seerne'; + @override String get relatedTitles => 'Relaterede titler'; + @override String get background => 'Baggrund'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$da extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$da._(TranslationsDa root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$da extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsDa { 'auth.waitingForAuth' => 'Venter på godkendelse...\nLog ind fra din browser.', 'auth.useBrowser' => 'Brug browseren', 'auth.or' => 'eller', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Opret forbindelse til ${product}', 'auth.useQuickConnect' => 'Brug Quick Connect', 'auth.quickConnectInstructions' => 'Åbn Quick Connect i Jellyfin, og indtast denne kode.', 'auth.quickConnectWaiting' => 'Venter på godkendelse…', @@ -2248,6 +2654,17 @@ extension on TranslationsDa { 'common.fullscreen' => 'Fuldskærm', 'common.exitFullscreen' => 'Forlad fuldskærm', 'common.pressBackAgainToExit' => 'Tryk på tilbage igen for at afslutte', + 'common.ratingSource.critic' => 'Anmeldere', + 'common.ratingSource.audience' => 'Publikum', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes-anmeldere', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes-publikum', 'screens.licenses' => 'Licenser', 'screens.switchProfile' => 'Skift profil', 'screens.subtitleStyling' => 'Undertekststil', @@ -2284,6 +2701,7 @@ extension on TranslationsDa { 'settings.darkTheme' => 'Mørk', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Bibliotekstæthed', + 'settings.displayScale' => 'Skalering', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Komfortabel', 'settings.tvCornerSpotlightBackdrop' => 'Fremhævet baggrundsbillede i hjørnet', @@ -2333,6 +2751,11 @@ extension on TranslationsDa { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => 'Automatisk (anbefalet)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} MB hukommelse tilgængelig. En buffer på ${size} MB kan påvirke afspilningen.', + 'settings.playbackBuffer' => 'Afspilningsbuffer', + 'settings.playbackBufferAuto' => 'Auto (anbefalet)', + 'settings.playbackBufferLarge' => 'Stor', + 'settings.playbackBufferExtraLarge' => 'Ekstra stor', + 'settings.playbackBufferDescription' => 'Bufrer mere mod ustabile forbindelser. Begrænses også af bufferstørrelsen.', 'settings.defaultQualityTitle' => 'Standardkvalitet', 'settings.musicQualityTitle' => 'Musikkvalitet', 'settings.subtitleStyling' => 'Undertekststil', @@ -2366,6 +2789,9 @@ extension on TranslationsDa { 'settings.debugLoggingDescription' => 'Aktiver detaljeret logning til fejlfinding', 'settings.viewLogs' => 'Vis logfiler', 'settings.viewLogsDescription' => 'Vis programmets logfiler', + 'settings.clearImageCache' => 'Ryd billedcache', + 'settings.clearImageCacheDescription' => 'Ryd cachelagrede covers og thumbnails. Billeder kan indlæse langsommere, indtil de downloades igen.', + 'settings.clearImageCacheSuccess' => 'Billedcachen er ryddet', 'settings.resetSettings' => 'Nulstil indstillinger', 'settings.resetSettingsDescription' => 'Gendan standardindstillinger. Dette kan ikke fortrydes.', 'settings.resetSettingsSuccess' => 'Indstillinger nulstillet', @@ -2549,29 +2975,118 @@ extension on TranslationsDa { 'hotkeys.actions.skipMarker' => 'Spring intro/rulletekster over', 'hotkeys.actions.screenshot' => 'Tag skærmbillede', 'fileInfo.title' => 'Filinfo', + 'fileInfo.overview' => 'Oversigt', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Lyd', 'fileInfo.subtitles' => 'Undertekster', + 'fileInfo.images' => 'Indlejrede billeder', + 'fileInfo.dataStreams' => 'Datastrømme', + 'fileInfo.lyrics' => 'Tekster', 'fileInfo.file' => 'Fil', + 'fileInfo.attachments' => 'Vedhæftninger', + 'fileInfo.delivery' => 'Levering', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Version ${index} af ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Fil ${index} af ${count}', + 'fileInfo.noStreams' => 'Serveren rapporterede ingen strømme for denne fil.', + 'fileInfo.copyPath' => 'Kopiér sti', + 'fileInfo.pathCopied' => 'Filstien er kopieret', 'fileInfo.codec' => 'Codec', + 'fileInfo.codecTag' => 'Codec-tag', 'fileInfo.resolution' => 'Opløsning', + 'fileInfo.codedResolution' => 'Kodet opløsning', 'fileInfo.bitrate' => 'Bitrate', 'fileInfo.frameRate' => 'Billedhastighed', + 'fileInfo.rotation' => 'Rotation', + 'fileInfo.comment' => 'Kommentar', + 'fileInfo.audioDescription' => 'Lydbeskrivelse', + 'fileInfo.headerCompression' => 'Headerkomprimering', + 'fileInfo.sidecarFile' => 'Sidecar-fil', + 'fileInfo.transportTimestamp' => 'Transporttidsstempel', + 'fileInfo.displayOffset' => 'Visningsforskydning', + 'fileInfo.previewFailureCode' => 'Preview-fejlkode', + 'fileInfo.previewRetries' => 'Preview-forsøg', 'fileInfo.aspectRatio' => 'Billedformat', + 'fileInfo.pixelAspectRatio' => 'Pixel-billedformat', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Niveau', 'fileInfo.bitDepth' => 'Bitdybde', + 'fileInfo.pixelFormat' => 'Pixelformat', 'fileInfo.colorSpace' => 'Farverum', 'fileInfo.colorRange' => 'Farveområde', 'fileInfo.colorPrimaries' => 'Farveprimærer', + 'fileInfo.colorTransfer' => 'Farveoverførsel', 'fileInfo.chromaSubsampling' => 'Chroma-subsampling', + 'fileInfo.chromaLocation' => 'Chroma-placering', + 'fileInfo.scanType' => 'Scanningstype', + 'fileInfo.interlaced' => 'Interlaced', + 'fileInfo.anamorphic' => 'Anamorfisk', + 'fileInfo.referenceFrames' => 'Referenceframes', + 'fileInfo.dynamicRange' => 'Dynamisk område', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision-niveau', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision-version', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision-lag', + 'fileInfo.baseLayerCompatibility' => 'Basislagskompatibilitet', + 'fileInfo.avcBitstream' => 'AVC-bitstrøm', + 'fileInfo.nalLengthSize' => 'NAL-længdestørrelse', + 'fileInfo.scalingMatrix' => 'Brugerdefineret skaleringsmatrix', + 'fileInfo.streamIdentifier' => 'Strømidentifikator', + 'fileInfo.streamIndex' => 'Strømindex', + 'fileInfo.streamId' => 'Strøm-ID', + 'fileInfo.language' => 'Sprog', + 'fileInfo.languageCode' => 'Sprogkode', + 'fileInfo.streamTitle' => 'Sportitel', 'fileInfo.channels' => 'Kanaler', + 'fileInfo.sampleRate' => 'Samplingshastighed', + 'fileInfo.spatialAudio' => 'Rumlig lyd', + 'fileInfo.textBased' => 'Tekstbaseret', + 'fileInfo.subtitleFormat' => 'Sidecar-format', + 'fileInfo.provider' => 'Udbydder', + 'fileInfo.matchScore' => 'Matchscore', + 'fileInfo.externalDelivery' => 'Kan leveres separat', + 'fileInfo.sidecarPath' => 'Sidecar-sti', + 'fileInfo.sourceStream' => 'Kopieret fra', + 'fileInfo.temporary' => 'Midlertidig', + 'fileInfo.timeBase' => 'Tidsbase', 'fileInfo.overallBitrate' => 'Samlet bitrate', 'fileInfo.path' => 'Sti', + 'fileInfo.fileName' => 'Filnavn', 'fileInfo.size' => 'Størrelse', + 'fileInfo.totalSize' => 'Samlet størrelse', 'fileInfo.container' => 'Container', 'fileInfo.duration' => 'Varighed', + 'fileInfo.previewThumbnails' => 'Preview-thumbnails', + 'fileInfo.previewIndex' => 'Preview-index', + 'fileInfo.packetLength' => 'Pakkelængde', + 'fileInfo.filePresent' => 'Fil til stede', + 'fileInfo.fileReadable' => 'Læsbar af serveren', + 'fileInfo.streamPath' => 'Strømsti', 'fileInfo.optimizedForStreaming' => 'Optimeret til streaming', 'fileInfo.has64bitOffsets' => '64-bit-forskydninger', + 'fileInfo.protocol' => 'Protokol', + 'fileInfo.mediaType' => 'Medietype', + 'fileInfo.sourceKind' => 'Kildetype', + 'fileInfo.optimizedVersion' => 'Optimeret version', + 'fileInfo.optimizationTarget' => 'Optimeringsmål', + 'fileInfo.deletedAt' => 'Slettet', + 'fileInfo.remoteSource' => 'Fjernkilde', + 'fileInfo.infiniteStream' => 'Uendelig strøm', + 'fileInfo.directPlay' => 'Direkte afspilning', + 'fileInfo.directStream' => 'Direkte strømning', + 'fileInfo.transcoding' => 'Transkodning', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Versions-ID', + 'fileInfo.fileId' => 'Fil-ID', + 'fileInfo.defaultAudioTrack' => 'Standard lydspor', + 'fileInfo.defaultSubtitleTrack' => 'Standard undertekstspor', + 'fileInfo.subtitlesOff' => 'Fra', + 'fileInfo.flagDefault' => 'Standard', + 'fileInfo.flagForced' => 'Tvunget', + 'fileInfo.flagSelected' => 'Valgt', + 'fileInfo.flagExternal' => 'Ekstern', + 'fileInfo.flagHearingImpaired' => 'Hørehæmmede', + 'fileInfo.flagDub' => 'Dub', + 'fileInfo.flagOriginal' => 'Original', 'mediaMenu.markAsWatched' => 'Markér som set', 'mediaMenu.markAsUnwatched' => 'Markér som uset', 'mediaMenu.removeFromContinueWatching' => 'Fjern fra Fortsæt med at se', @@ -2580,7 +3095,28 @@ extension on TranslationsDa { 'mediaMenu.shufflePlay' => 'Afspil tilfældigt', 'mediaMenu.shuffleNotAvailableOffline' => 'Tilfældig afspilning er ikke tilgængelig offline', 'mediaMenu.fileInfo' => 'Filinfo', + 'mediaMenu.deleteEpisodeFromServer' => 'Slet episode fra serveren', + 'mediaMenu.deleteSeasonFromServer' => 'Slet sæson fra serveren', + 'mediaMenu.deleteShowFromServer' => 'Slet TV-serie fra serveren', + 'mediaMenu.deleteMovieFromServer' => 'Slet film fra serveren', + 'mediaMenu.deleteEpisodeTitle' => 'Slet denne episode?', + 'mediaMenu.deleteSeasonTitle' => 'Slet denne sæson?', + 'mediaMenu.deleteShowTitle' => 'Slet denne TV-serie?', + 'mediaMenu.deleteMovieTitle' => 'Slet denne film?', + 'mediaMenu.deleteEpisodeConfirm' => 'Slet episode', + 'mediaMenu.deleteSeasonConfirm' => 'Slet sæson', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Slet TV-serie', + 'mediaMenu.deleteMovieConfirm' => 'Slet film', + 'mediaMenu.deleteAnyway' => 'Slet alligevel', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Slet ${title} permanent fra din server?', 'mediaMenu.deleteMultipleWarning' => 'Dette inkluderer alle episoder og deres filer.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: 'Dette sletter alle ${n} episode i den og dens fil.', other: 'Dette sletter alle ${n} episoder i den og deres filer.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: 'Dette emne er gemt som ${n} fil, som vil blive slettet.', other: 'Dette emne er gemt på tværs af ${n} filer, og alle vil blive slettet.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: '${n} anden episode er gemt i samme fil og vil også blive slettet:', other: '${n} andre episoder er gemt i samme fil og vil også blive slettet:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy kunne ikke kontrollere, hvilke filer dette vil fjerne, så det kan slette mere end det ovennævnte emne. Annuller og prøv igen, eller slet alligevel.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Din server leverede ikke filoplysninger for dette emne, så Plezy kan ikke kontrollere, hvilke filer dette vil fjerne. Det kan slette mere end det ovennævnte emne.', 'mediaMenu.mediaDeletedSuccessfully' => 'Mediet blev slettet', 'mediaMenu.mediaFailedToDelete' => 'Mediet kunne ikke slettes', 'mediaMenu.rate' => 'Bedøm', @@ -2646,6 +3182,9 @@ extension on TranslationsDa { 'videoControls.playNext' => 'Afspil næste', 'videoControls.playButton' => 'Afspil', 'videoControls.pauseButton' => 'Pause', + 'videoControls.playbackPaused' => 'Pauseret', + 'videoControls.playbackResumed' => 'Afspiller', + 'videoControls.loadingVideo' => 'Indlæser video', 'videoControls.showPlaybackControls' => 'Vis afspilningsknapper', 'videoControls.hidePlaybackControls' => 'Skjul afspilningsknapper', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Spol ${seconds} sekunder tilbage', @@ -2700,8 +3239,6 @@ extension on TranslationsDa { 'videoControls.subtitleDownloaded' => 'Undertekst downloadet', 'videoControls.subtitleDownloadedNotApplied' => 'Underteksten blev downloadet, men kunne ikke vælges', 'videoControls.subtitleDownloadFailed' => 'Kunne ikke downloade undertekst', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Søg sprog...', 'messages.markedAsWatched' => 'Markeret som set', 'messages.markedAsUnwatched' => 'Markeret som uset', @@ -2711,6 +3248,7 @@ extension on TranslationsDa { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: 'Fjernede automatisk ${n} set download', other: 'Fjernede automatisk ${n} sete downloads', ), 'messages.removedFromContinueWatching' => 'Fjernet fra Fortsæt med at se', 'messages.errorLoading' => ({required Object error}) => 'Fejl: ${error}', + 'messages.searchPartialResults' => 'Nogle medieservere kunne ikke søges i. Viser tilgængelige resultater.', 'messages.streamInterrupted' => 'Streamen blev afbrudt. Tryk på afspil, eller spol for at prøve igen.', 'messages.liveStreamInterrupted' => 'Livestreamen blev afbrudt. Tryk på afspil for at prøve igen.', 'messages.fileInfoNotAvailable' => 'Filinfo ikke tilgængelig', @@ -2749,6 +3287,8 @@ extension on TranslationsDa { 'messages.switchingToCompatiblePlayer' => 'Skifter til kompatibel afspiller...', 'messages.serverLimitTitle' => 'Afspilning mislykkedes', 'messages.serverLimitBody' => 'Serverfejl (HTTP 500). En båndbredde- eller transkodningsgrænse afviste sandsynligvis sessionen. Bed ejeren om at justere den.', + 'messages.mediaUnreadableTitle' => 'Fil utilgængelig', + 'messages.mediaUnreadableBody' => 'Serveren fandt dette emne, men kunne ikke læse filen (HTTP 404). Filen er sandsynligvis flyttet, slettet, eller dens lager er offline. Bed serverejeren om at kontrollere filen og scanne biblioteket igen.', 'messages.logsUploaded' => 'Logfilerne blev uploadet', 'messages.logsUploadFailed' => 'Logfilerne kunne ikke uploades', 'messages.logId' => 'Log-ID', @@ -2857,6 +3397,8 @@ extension on TranslationsDa { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sessionen er udløbet for ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sessionerne er udløbet for ${count} servere', 'connections.signInAgain' => 'Log ind igen', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Rediger ${product}-forbindelse', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Tilføj eller fjern URL\'er for ${serverName}. Plezy bruger den tilgængelige URL med laveste latenstid.', 'discover.title' => 'Opdag', 'discover.noContentAvailable' => 'Intet indhold tilgængeligt', 'discover.addMediaToLibraries' => 'Tilføj medier til dine biblioteker', @@ -2882,6 +3424,7 @@ extension on TranslationsDa { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min tilbage', 'discover.moreLikeThis' => 'Mere som dette', 'errors.searchFailed' => ({required Object error}) => 'Søgning mislykkedes: ${error}', + 'errors.searchUnavailable' => 'Søgningen kunne ikke nå nogen medieserver.', 'errors.connectionTimeout' => ({required Object context}) => 'Forbindelsen fik timeout under indlæsning af ${context}', 'errors.connectionFailed' => 'Kan ikke oprette forbindelse til medieserver', 'errors.unableToLoad' => ({required Object context}) => 'Kunne ikke indlæse ${context}. Prøv igen.', @@ -2989,6 +3532,36 @@ extension on TranslationsDa { 'logs.clearLogs' => 'Ryd logfiler', 'logs.copyLogs' => 'Kopiér logfiler', 'logs.uploadLogs' => 'Upload logfiler', + 'startup.failedTitle' => 'Plezy kunne ikke starte', + 'startup.failedBody' => 'Der gik noget galt under opstart. Oplysningerne nedenfor viser, hvad der gik galt.', + 'startup.failedBodyRepairable' => 'Plezy\'s gemte indstillingsfil er beskadiget og skal genopbygges, før Plezy kan starte. Det hjælper ikke at prøve igen — vælg Reparer lager.', + 'startup.phaseLabel' => 'Trin', + 'startup.showDetails' => 'Vis detaljer', + 'startup.hideDetails' => 'Skjul detaljer', + 'startup.copyDetails' => 'Kopiér detaljer', + 'startup.detailsCopied' => 'Detaljer kopieret til udklipsholder', + 'startup.uploadDetails' => 'Upload detaljer', + 'startup.repairStorage' => 'Reparer lager', + 'startup.repairTitle' => 'Reparer gemte data?', + 'startup.repairBodyCommon' => 'Plezy\'s indstillingsfil er beskadiget og kan ikke læses. Reparation nulstiller alle indstillinger til deres standardværdier.', + 'startup.repairBodyOneCredential' => 'Én gemt loginoplysning er beskadiget og kan ikke læses. Reparation fjerner kun den; dine andre indstillinger forbliver urørt.', + 'startup.repairBodySignInsKept' => 'Dine servere og profiler bør forblive logget ind.', + 'startup.repairBodySignInsLost' => 'Nøglen, der beskytter dine gemte loginoplysninger, kan ikke gendannes fra denne fil, så du skal logge ind på alle servere og profiler igen. Intet på din medieserver er påvirket.', + 'startup.repairBodySessionsUncertain' => 'Trackere (MAL, AniList, Simkl, Trakt) og Seerr gemmes separat, og det er uvist, om de overlever. Plezy fortæller dig præcis, hvad det beholdt.', + 'startup.repairConfirm' => 'Reparer', + 'startup.repairSucceeded' => 'Lager repareret', + 'startup.repairNeedsRestart' => 'Lager repareret — genstart påkrævet', + 'startup.restartRequiredBody' => 'Dine data er blevet repareret, men Plezy skal starte på ny, før det kan bruge dem. Luk Plezy, og åbn det igen.', + 'startup.quitPlezy' => 'Afslut Plezy', + 'startup.repairFailed' => 'Reparation mislykkedes', + 'startup.repairKeptSignIns' => 'Dine servere og profiler er stadig logget ind.', + 'startup.repairLostSignIns' => 'Nøglen, der beskytter dine gemte loginoplysninger, kunne ikke gendannes. Du skal logge ind på alle servere og profiler igen.', + 'startup.repairLostSessions' => 'Mindst én tracker- eller Seerr-forbindelse gik tabt og skal genetableres.', + 'startup.backupTitle' => 'En kopi af den beskadigede fil blev gemt', + 'startup.backupWarning' => 'Den indeholder dine loginoplysninger. Upload eller del den ikke.', + 'startup.deleteBackup' => 'Slet kopi', + 'startup.backupDeleted' => 'Kopi slettet.', + 'startup.previousFailureTitle' => 'Plezy kunne ikke starte sidste gang', 'licenses.relatedPackages' => 'Relaterede pakker', 'licenses.license' => 'Licens', 'licenses.licenseNumber' => ({required Object number}) => 'Licens ${number}', @@ -3032,6 +3605,113 @@ extension on TranslationsDa { 'explore.searchEmpty' => ({required Object query}) => 'Ingen resultater for "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Søg efter film og serier på ${source}.', 'explore.searchFailed' => 'Søgningen mislykkedes. Tjek din forbindelse, og prøv igen.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} populær', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} på luften', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} bedømt', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favorit', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} populær lige nu', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} i ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} ser med', + 'explore.badge.available' => 'Tilgængelig', + 'explore.badge.partiallyAvailable' => 'Delvist tilgængelig', + 'explore.badge.availableIn4k' => '4K tilgængelig', + 'explore.badge.requested' => 'Anmodet', + 'explore.badge.pendingApproval' => 'Afventer godkendelse', + 'explore.badge.processing' => 'Behandles', + 'explore.badge.declined' => 'Afvist', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Anmodningen mislykkedes', + 'explore.badge.requested4k' => '4K anmodet', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} sæsoner', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Afsnit ${episode} om ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Næste om ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} afsnit', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/afsnit', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} opført', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} så det i dag', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} så det denne uge', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} så det denne måned', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} så det i år', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} seere', + 'explore.stats.planning' => ({required Object n}) => '${n} planlægger at se det', + 'explore.stats.favorited' => ({required Object n}) => '${n} favoritter', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} droppede det', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: '${n} kommentar', other: '${n} kommentarer', ), + 'explore.stats.votes' => ({required Object n}) => '${n} stemmer', + 'explore.stats.watching' => ({required Object n}) => '${n} ser det', + 'explore.stats.completed' => ({required Object n}) => '${n} færdigset', + 'explore.stats.onHold' => ({required Object n}) => '${n} på pause', + 'explore.stats.dropped' => ({required Object n}) => '${n} droppede', + 'explore.season.winter' => 'Vinter', + 'explore.season.spring' => 'Forår', + 'explore.season.summer' => 'Sommer', + 'explore.season.fall' => 'Efterår', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV-kort', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Special', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musik', + 'explore.format.other' => 'Andet', + 'explore.sourceMaterial.original' => 'Original', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Spil', + 'explore.sourceMaterial.webComic' => 'Webtegneserie', + 'explore.sourceMaterial.musicRelease' => 'Musik', + 'explore.sourceMaterial.otherMedia' => 'Andet', + 'explore.creditRole.director' => 'Instruktør', + 'explore.creditRole.writer' => 'Forfatter', + 'explore.creditRole.producer' => 'Producer', + 'explore.creditRole.creator' => 'Skaber', + 'explore.creditRole.composer' => 'Komponist', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Sequel', + 'explore.relation.sideStory' => 'Bihistorie', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternativ version', + 'explore.relation.summary' => 'Resumé', + 'explore.relation.parentStory' => 'Hovedhistorie', + 'explore.relation.adaptation' => 'Adaption', + 'explore.relation.other' => 'Relateret', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Sendes ${day} kl. ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Sendes ${day} kl. ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Originaltitel', + 'explore.detail.alsoKnownAs' => 'Også kendt som', + 'explore.detail.studios' => 'Studier', + 'explore.detail.country' => 'Land', + 'explore.detail.language' => 'Sprog', + 'explore.detail.released' => 'Udgivet', + 'explore.detail.physicalRelease' => 'På disk', + 'explore.detail.ended' => 'Afsluttet', + 'explore.detail.addedOn' => ({required Object date}) => 'Tilføjet ${date}', + 'explore.detail.yourRating' => 'Din bedømmelse', + 'explore.detail.budget' => 'Budget', + 'explore.detail.revenue' => 'Billetindtægter', + 'explore.detail.contentAdvisory' => 'Aldersvejledning', + 'explore.detail.tags' => 'Tags', + 'explore.detail.revealSpoilerTags' => 'Vis spoilertags', + 'explore.detail.links' => 'Links', + 'explore.detail.watchOn' => 'Se på', + 'explore.detail.watchTrailer' => 'Se trailer', + 'explore.detail.openOn' => ({required Object site}) => 'Åbn på ${site}', + 'explore.detail.crew' => 'Crew', + 'explore.detail.ratings' => 'Bedømmelser', + 'explore.detail.schedule' => 'Program', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: 'Anbefalet af ${n} bruger', other: 'Anbefalet af ${n} brugere', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Anbefalet af ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Favorit hos ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} ikke sendt endnu', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Anbefalet af ${percent} af seerne', + 'explore.detail.relatedTitles' => 'Relaterede titler', + 'explore.detail.background' => 'Baggrund', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: '${n} resultat', other: '${n} resultater', ), 'liveTv.title' => 'Live TV', 'liveTv.guide' => 'Guide', 'liveTv.noChannels' => 'Ingen kanaler tilgængelige', @@ -3214,8 +3894,6 @@ extension on TranslationsDa { 'watchTogether.relayUnreachable' => 'Relayserveren kan ikke nås. Blokering hos internetudbyderen kan forhindre Se sammen.', 'watchTogether.reconnectingToHost' => 'Genopretter forbindelse til vært...', 'watchTogether.currentPlayback' => 'Nuværende afspilning', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Deltag i nuværende afspilning', 'watchTogether.joinCurrentPlaybackDescription' => 'Hop tilbage til det værten ser nu', 'watchTogether.failedToOpenCurrentPlayback' => 'Kunne ikke åbne nuværende afspilning', @@ -3284,9 +3962,15 @@ extension on TranslationsDa { 'downloads.editSyncRule' => 'Rediger synkroniseringsregel', 'downloads.removeSyncRule' => 'Fjern synkroniseringsregel', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Stop synkronisering af "${title}"? Downloadede episoder beholdes.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Stop synkronisering af "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Slet også tilknyttede downloads', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Downloads, der bruges af en anden synkroniseringsregel eller profil, beholdes.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Synkroniseringsregel oprettet — beholder ${count} usete episoder', 'downloads.syncRuleUpdated' => 'Synkroniseringsregel opdateret', 'downloads.syncRuleRemoved' => 'Synkroniseringsregel fjernet', + 'downloads.syncRuleAndDownloadsRemoved' => 'Synkroniseringsregel og tilknyttede downloads fjernet', + 'downloads.syncRuleCleanupBusy' => 'Synkroniseringsregler opdateres lige nu. Prøv igen om et øjeblik.', + 'downloads.syncRuleCleanupUnavailable' => 'Tilknyttede downloads kunne ikke identificeres sikkert. Genopret forbindelse til serveren og prøv igen, eller fjern reglen uden at slette downloads.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => 'Synkroniserede ${count} nye episoder for ${title}', 'downloads.activeSyncRules' => 'Synkroniseringsregler', 'downloads.noSyncRules' => 'Ingen synkroniseringsregler', @@ -3449,6 +4133,8 @@ extension on TranslationsDa { 'performanceOverlay.dvRpus' => 'DV RPU’er', 'performanceOverlay.dvRpuAverage' => 'DV RPU gns.', 'performanceOverlay.dvSampleAverage' => 'DV-sample gns.', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Maks. luma', 'performanceOverlay.minLuma' => 'Min. luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsDa { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Aktiver Plezy på ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Besøg ${url} og indtast denne kode:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Åbn ${service} for at aktivere', @@ -3641,9 +4328,12 @@ extension on TranslationsDa { 'services.libraryFilter.modeHintWhitelist' => 'Synkroniser kun de biblioteker, du markerer nedenfor.', 'services.libraryFilter.libraries' => 'Biblioteker', 'services.libraryFilter.noLibraries' => 'Ingen biblioteker tilgængelige', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Tilføj ${product}-server', 'addServer.serverUrls' => 'Server-URL\'er', 'addServer.serverUrlsHelper' => 'Du kan angive flere URL\'er adskilt med komma.', 'addServer.findServer' => 'Find server', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Leder efter lokale ${product}-servere...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Lokale ${product}-servere', 'addServer.username' => 'Brugernavn', 'addServer.password' => 'Adgangskode', 'addServer.signIn' => 'Log ind', @@ -3655,11 +4345,15 @@ extension on TranslationsDa { 'addServer.addPlexTitle' => 'Log ind med Plex', 'addServer.pinExpired' => 'PIN-koden udløb før login. Prøv igen.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunne ikke registrere kontoen: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Indtast din ${product}-server-URL', 'addServer.addConnectionTitle' => 'Tilføj forbindelse', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Tilføj til ${name}', 'addServer.signInWithPlexCard' => 'Log ind med Plex', 'addServer.signInWithPlexCardSubtitle' => 'Godkend denne enhed. Delte servere tilføjes.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Godkend en Plex-konto. Plex Home-brugere bliver til profiler.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Opret forbindelse til ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Indtast din server-URL, brugernavn og adgangskode.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Log ind på din ${product}-server. Tilknyttes til ${name}.', 'addServer.borrowFromAnotherProfile' => 'Lån fra en anden profil', 'addServer.borrowFromAnotherProfileSubtitle' => 'Genbrug en anden profils forbindelse. PIN-beskyttede profiler kræver en PIN.', _ => null, diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index a8faffdc..07d49c79 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -67,6 +67,7 @@ class TranslationsDe extends Translations with BaseTranslations 'Warte auf die Authentifizierung …\nMelde dich über deinen Browser an.'; @override String get useBrowser => 'Browser verwenden'; @override String get or => 'oder'; + @override String connectToMediaBrowser({required Object product}) => 'Mit ${product} verbinden'; @override String get useQuickConnect => 'Quick Connect verwenden'; @override String get quickConnectInstructions => 'Öffne Quick Connect in Jellyfin und gib diesen Code ein.'; @override String get quickConnectWaiting => 'Warte auf Bestätigung…'; @@ -175,6 +177,7 @@ class _Translations$common$de extends Translations$common$en { @override String get fullscreen => 'Vollbild'; @override String get exitFullscreen => 'Vollbild verlassen'; @override String get pressBackAgainToExit => 'Zum Beenden erneut Zurück drücken'; + @override late final _Translations$common$ratingSource$de ratingSource = _Translations$common$ratingSource$de._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$de extends Translations$settings$en { @override String get darkTheme => 'Dunkel'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Darstellungsdichte der Mediathek'; + @override String get displayScale => 'Skalierung'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Großzügig'; @override String get tvCornerSpotlightBackdrop => 'Backdrop in der Ecke'; @@ -287,6 +291,11 @@ class _Translations$settings$de extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => 'Automatisch (empfohlen)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} MB Speicher verfügbar. Ein Puffer von ${size} MB kann die Wiedergabe beeinträchtigen.'; + @override String get playbackBuffer => 'Wiedergabepuffer'; + @override String get playbackBufferAuto => 'Automatisch (empfohlen)'; + @override String get playbackBufferLarge => 'Groß'; + @override String get playbackBufferExtraLarge => 'Extra groß'; + @override String get playbackBufferDescription => 'Puffert mehr gegen instabile Verbindungen. Zusätzlich durch die Puffergröße begrenzt.'; @override String get defaultQualityTitle => 'Standardqualität'; @override String get musicQualityTitle => 'Musikqualität'; @override String get subtitleStyling => 'Untertitel-Stil'; @@ -320,6 +329,9 @@ class _Translations$settings$de extends Translations$settings$en { @override String get debugLoggingDescription => 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; @override String get viewLogs => 'Protokolle anzeigen'; @override String get viewLogsDescription => 'App-Protokolle anzeigen'; + @override String get clearImageCache => 'Bildercache leeren'; + @override String get clearImageCacheDescription => 'Zwischengespeicherte Artworks und Vorschaubilder löschen. Bilder können langsamer laden, bis sie erneut heruntergeladen werden.'; + @override String get clearImageCacheSuccess => 'Bildercache erfolgreich geleert'; @override String get resetSettings => 'Einstellungen zurücksetzen'; @override String get resetSettingsDescription => 'Standardeinstellungen wiederherstellen. Dies kann nicht rückgängig gemacht werden.'; @override String get resetSettingsSuccess => 'Einstellungen erfolgreich zurückgesetzt'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$de extends Translations$fileInfo$en { // Translations @override String get title => 'Dateiinformationen'; + @override String get overview => 'Übersicht'; @override String get video => 'Video'; @override String get audio => 'Audio'; @override String get subtitles => 'Untertitel'; + @override String get images => 'Eingebettete Bilder'; + @override String get dataStreams => 'Datenstreams'; + @override String get lyrics => 'Songtexte'; @override String get file => 'Datei'; + @override String get attachments => 'Anhänge'; + @override String get delivery => 'Bereitstellung'; + @override String versionCounter({required Object index, required Object count}) => 'Version ${index} von ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Datei ${index} von ${count}'; + @override String get noStreams => 'Der Server hat für diese Datei keine Streams gemeldet.'; + @override String get copyPath => 'Pfad kopieren'; + @override String get pathCopied => 'Dateipfad kopiert'; @override String get codec => 'Codec'; + @override String get codecTag => 'Codec-Tag'; @override String get resolution => 'Auflösung'; + @override String get codedResolution => 'Codierte Auflösung'; @override String get bitrate => 'Bitrate'; @override String get frameRate => 'Bildrate'; + @override String get rotation => 'Rotation'; + @override String get comment => 'Kommentar'; + @override String get audioDescription => 'Audiodeskription'; + @override String get headerCompression => 'Header-Komprimierung'; + @override String get sidecarFile => 'Sidecar-Datei'; + @override String get transportTimestamp => 'Transport-Zeitstempel'; + @override String get displayOffset => 'Anzeige-Offset'; + @override String get previewFailureCode => 'Fehlercode der Vorschau'; + @override String get previewRetries => 'Vorschau-Wiederholungsversuche'; @override String get aspectRatio => 'Seitenverhältnis'; + @override String get pixelAspectRatio => 'Pixel-Seitenverhältnis'; @override String get profile => 'Profil'; + @override String get level => 'Level'; @override String get bitDepth => 'Bittiefe'; + @override String get pixelFormat => 'Pixelformat'; @override String get colorSpace => 'Farbraum'; @override String get colorRange => 'Farbbereich'; @override String get colorPrimaries => 'Primärfarben'; + @override String get colorTransfer => 'Farbübertragung'; @override String get chromaSubsampling => 'Chroma-Subsampling'; + @override String get chromaLocation => 'Chroma-Position'; + @override String get scanType => 'Scan-Typ'; + @override String get interlaced => 'Interlaced'; + @override String get anamorphic => 'Anamorph'; + @override String get referenceFrames => 'Referenzbilder'; + @override String get dynamicRange => 'Dynamikbereich'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby-Vision-Level'; + @override String get dolbyVisionVersion => 'Dolby-Vision-Version'; + @override String get dolbyVisionLayers => 'Dolby-Vision-Ebenen'; + @override String get baseLayerCompatibility => 'Kompatibilität der Basisebene'; + @override String get avcBitstream => 'AVC-Bitstream'; + @override String get nalLengthSize => 'NAL-Längengröße'; + @override String get scalingMatrix => 'Benutzerdefinierte Skalierungsmatrix'; + @override String get streamIdentifier => 'Stream-Kennung'; + @override String get streamIndex => 'Stream-Index'; + @override String get streamId => 'Stream-ID'; + @override String get language => 'Sprache'; + @override String get languageCode => 'Sprachcode'; + @override String get streamTitle => 'Track-Titel'; @override String get channels => 'Kanäle'; + @override String get sampleRate => 'Abtastrate'; + @override String get spatialAudio => 'Räumliches Audio'; + @override String get textBased => 'Textbasiert'; + @override String get subtitleFormat => 'Sidecar-Format'; + @override String get provider => 'Anbieter'; + @override String get matchScore => 'Übereinstimmungswert'; + @override String get externalDelivery => 'Kann separat bereitgestellt werden'; + @override String get sidecarPath => 'Sidecar-Pfad'; + @override String get sourceStream => 'Kopiert von'; + @override String get temporary => 'Temporär'; + @override String get timeBase => 'Zeitbasis'; @override String get overallBitrate => 'Gesamtbitrate'; @override String get path => 'Pfad'; + @override String get fileName => 'Dateiname'; @override String get size => 'Größe'; + @override String get totalSize => 'Gesamtgröße'; @override String get container => 'Container'; @override String get duration => 'Dauer'; + @override String get previewThumbnails => 'Vorschaubilder'; + @override String get previewIndex => 'Vorschau-Index'; + @override String get packetLength => 'Paketlänge'; + @override String get filePresent => 'Datei vorhanden'; + @override String get fileReadable => 'Vom Server lesbar'; + @override String get streamPath => 'Stream-Pfad'; @override String get optimizedForStreaming => 'Für Streaming optimiert'; @override String get has64bitOffsets => '64-Bit-Offsets'; + @override String get protocol => 'Protokoll'; + @override String get mediaType => 'Medientyp'; + @override String get sourceKind => 'Quellenart'; + @override String get optimizedVersion => 'Optimierte Version'; + @override String get optimizationTarget => 'Optimierungsziel'; + @override String get deletedAt => 'Gelöscht'; + @override String get remoteSource => 'Remote-Quelle'; + @override String get infiniteStream => 'Endlos-Stream'; + @override String get directPlay => 'Direct Play'; + @override String get directStream => 'Direct Stream'; + @override String get transcoding => 'Transkodierung'; + @override String get etag => 'ETag'; + @override String get versionId => 'Versions-ID'; + @override String get fileId => 'Datei-ID'; + @override String get defaultAudioTrack => 'Standard-Audiospur'; + @override String get defaultSubtitleTrack => 'Standard-Untertitelspur'; + @override String get subtitlesOff => 'Aus'; + @override String get flagDefault => 'Standard'; + @override String get flagForced => 'Erzwungen'; + @override String get flagSelected => 'Ausgewählt'; + @override String get flagExternal => 'Extern'; + @override String get flagHearingImpaired => 'Für Hörgeschädigte'; + @override String get flagDub => 'Dub'; + @override String get flagOriginal => 'Original'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$de extends Translations$mediaMenu$en { @override String get shufflePlay => 'Zufallswiedergabe'; @override String get shuffleNotAvailableOffline => 'Zufallswiedergabe ist offline nicht verfügbar'; @override String get fileInfo => 'Dateiinfo'; + @override String get deleteEpisodeFromServer => 'Folge vom Server löschen'; + @override String get deleteSeasonFromServer => 'Staffel vom Server löschen'; + @override String get deleteShowFromServer => 'Serie vom Server löschen'; + @override String get deleteMovieFromServer => 'Film vom Server löschen'; + @override String get deleteEpisodeTitle => 'Diese Folge löschen?'; + @override String get deleteSeasonTitle => 'Diese Staffel löschen?'; + @override String get deleteShowTitle => 'Diese Serie löschen?'; + @override String get deleteMovieTitle => 'Diesen Film löschen?'; + @override String get deleteEpisodeConfirm => 'Folge löschen'; + @override String get deleteSeasonConfirm => 'Staffel löschen'; + @override String get deleteShowConfirm => 'Serie löschen'; + @override String get deleteMovieConfirm => 'Film löschen'; + @override String get deleteAnyway => 'Trotzdem löschen'; + @override String confirmDeleteTarget({required Object title}) => '„${title}“ dauerhaft von deinem Server löschen?'; @override String get deleteMultipleWarning => 'Dies umfasst alle Episoden und deren Dateien.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: 'Dies löscht alle ${n} Folge darin sowie ihre Datei.', + other: 'Dies löscht alle ${n} Folgen darin sowie ihre Dateien.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: 'Dieses Element ist als ${n} Datei gespeichert, die gelöscht wird.', + other: 'Dieses Element ist über ${n} Dateien verteilt gespeichert, die alle gelöscht werden.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: '${n} weitere Folge ist in derselben Datei gespeichert und wird ebenfalls gelöscht:', + other: '${n} weitere Folgen sind in derselben Datei gespeichert und werden ebenfalls gelöscht:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy konnte nicht prüfen, welche Dateien dadurch entfernt werden. Es könnte also mehr gelöscht werden als das oben genannte Element. Brich ab und versuche es erneut, oder lösche trotzdem.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Dein Server hat für dieses Element keine Dateidetails bereitgestellt, daher kann Plezy nicht prüfen, welche Dateien entfernt werden. Es könnte mehr gelöscht werden als das oben genannte Element.'; @override String get mediaDeletedSuccessfully => 'Medienelement gelöscht'; @override String get mediaFailedToDelete => 'Medienelement konnte nicht gelöscht werden'; @override String get rate => 'Bewerten'; @@ -657,6 +786,9 @@ class _Translations$videoControls$de extends Translations$videoControls$en { @override String get playNext => 'Nächstes abspielen'; @override String get playButton => 'Abspielen'; @override String get pauseButton => 'Pause'; + @override String get playbackPaused => 'Pausiert'; + @override String get playbackResumed => 'Wird abgespielt'; + @override String get loadingVideo => 'Video wird geladen'; @override String get showPlaybackControls => 'Wiedergabesteuerung anzeigen'; @override String get hidePlaybackControls => 'Wiedergabesteuerung ausblenden'; @override String seekBackwardButton({required Object seconds}) => '${seconds} Sekunden zurück'; @@ -726,6 +858,7 @@ class _Translations$messages$de extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Aus „Weiterschauen“ entfernt'; @override String errorLoading({required Object error}) => 'Fehler: ${error}'; + @override String get searchPartialResults => 'Einige Medienserver konnten nicht durchsucht werden. Verfügbare Ergebnisse werden angezeigt.'; @override String get streamInterrupted => 'Der Stream wurde unterbrochen. Drücke auf Wiedergabe oder spule, um es erneut zu versuchen.'; @override String get liveStreamInterrupted => 'Der Livestream wurde unterbrochen. Drücke auf Wiedergabe, um es erneut zu versuchen.'; @override String get fileInfoNotAvailable => 'Dateiinfo nicht verfügbar'; @@ -764,6 +897,8 @@ class _Translations$messages$de extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Wechsel zu einem kompatiblen Player …'; @override String get serverLimitTitle => 'Wiedergabe fehlgeschlagen'; @override String get serverLimitBody => 'Serverfehler (HTTP 500). Vermutlich hat ein Bandbreiten- oder Transkodierungslimit diese Sitzung abgelehnt. Bitte den Besitzer, das Limit anzupassen.'; + @override String get mediaUnreadableTitle => 'Datei nicht verfügbar'; + @override String get mediaUnreadableBody => 'Der Server hat dieses Element gefunden, konnte seine Datei aber nicht lesen (HTTP 404). Die Datei wurde wahrscheinlich verschoben oder gelöscht, oder ihr Speicher ist offline. Bitte den Serverbesitzer, die Datei zu prüfen und die Mediathek neu zu scannen.'; @override String get logsUploaded => 'Protokolle hochgeladen'; @override String get logsUploadFailed => 'Protokolle konnten nicht hochgeladen werden'; @override String get logId => 'Protokoll-ID'; @@ -917,6 +1052,8 @@ class _Translations$connections$de extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sitzung für ${name} abgelaufen'; @override String sessionExpiredMany({required Object count}) => 'Sitzungen für ${count} Server abgelaufen'; @override String get signInAgain => 'Erneut anmelden'; + @override String editMediaBrowserTitle({required Object product}) => 'Verbindung zu ${product} bearbeiten'; + @override String editMediaBrowserIntro({required Object serverName}) => 'URLs für ${serverName} hinzufügen oder entfernen. Plezy verwendet die erreichbare URL mit der geringsten Latenz.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$de extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Suche fehlgeschlagen: ${error}'; + @override String get searchUnavailable => 'Die Suche konnte keinen Medienserver erreichen.'; @override String connectionTimeout({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}'; @override String get connectionFailed => 'Keine Verbindung zum Medienserver möglich'; @override String unableToLoad({required Object context}) => '${context} konnte nicht geladen werden. Bitte erneut versuchen.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$de extends Translations$logs$en { @override String get uploadLogs => 'Protokolle hochladen'; } +// Path: startup +class _Translations$startup$de extends Translations$startup$en { + _Translations$startup$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy konnte nicht gestartet werden'; + @override String get failedBody => 'Beim Start ist etwas schiefgelaufen. Die Details unten zeigen, was fehlgeschlagen ist.'; + @override String get failedBodyRepairable => 'Die gespeicherte Einstellungsdatei von Plezy ist beschädigt und muss neu aufgebaut werden, bevor Plezy starten kann. Erneutes Versuchen hilft nicht – wähle „Speicher reparieren“.'; + @override String get phaseLabel => 'Schritt'; + @override String get showDetails => 'Details anzeigen'; + @override String get hideDetails => 'Details ausblenden'; + @override String get copyDetails => 'Details kopieren'; + @override String get detailsCopied => 'Details in die Zwischenablage kopiert'; + @override String get uploadDetails => 'Details hochladen'; + @override String get repairStorage => 'Speicher reparieren'; + @override String get repairTitle => 'Gespeicherte Daten reparieren?'; + @override String get repairBodyCommon => 'Die Einstellungsdatei von Plezy ist beschädigt und kann nicht gelesen werden. Beim Reparieren werden alle Einstellungen auf ihre Standardwerte zurückgesetzt.'; + @override String get repairBodyOneCredential => 'Eine gespeicherte Anmeldung ist beschädigt und kann nicht gelesen werden. Beim Reparieren wird nur diese entfernt; deine übrigen Einstellungen bleiben unangetastet.'; + @override String get repairBodySignInsKept => 'Deine Server und Profile sollten angemeldet bleiben.'; + @override String get repairBodySignInsLost => 'Der Schlüssel, der deine gespeicherten Anmeldungen schützt, kann aus dieser Datei nicht wiederhergestellt werden. Du musst dich daher bei jedem Server und Profil erneut anmelden. Auf deinem Medienserver ändert sich nichts.'; + @override String get repairBodySessionsUncertain => 'Tracker (MAL, AniList, Simkl, Trakt) und Seerr werden separat gespeichert und können erhalten bleiben oder auch nicht. Plezy teilt dir genau mit, was erhalten blieb.'; + @override String get repairConfirm => 'Reparieren'; + @override String get repairSucceeded => 'Speicher repariert'; + @override String get repairNeedsRestart => 'Speicher repariert – Neustart erforderlich'; + @override String get restartRequiredBody => 'Deine Daten wurden repariert, aber Plezy muss neu starten, bevor es sie verwenden kann. Schließe Plezy und öffne es erneut.'; + @override String get quitPlezy => 'Plezy beenden'; + @override String get repairFailed => 'Reparatur fehlgeschlagen'; + @override String get repairKeptSignIns => 'Deine Server und Profile sind weiterhin angemeldet.'; + @override String get repairLostSignIns => 'Der Schlüssel, der deine gespeicherten Anmeldungen schützt, konnte nicht wiederhergestellt werden. Du musst dich bei jedem Server und Profil erneut anmelden.'; + @override String get repairLostSessions => 'Mindestens eine Tracker- oder Seerr-Verbindung ging verloren und muss neu verbunden werden.'; + @override String get backupTitle => 'Eine Kopie der beschädigten Datei wurde aufbewahrt'; + @override String get backupWarning => 'Sie enthält deine Anmeldedaten. Lade sie nicht hoch und teile sie nicht.'; + @override String get deleteBackup => 'Kopie löschen'; + @override String get backupDeleted => 'Kopie gelöscht.'; + @override String get previousFailureTitle => 'Plezy konnte beim letzten Mal nicht starten'; +} + // Path: licenses class _Translations$licenses$de extends Translations$licenses$en { _Translations$licenses$de._(TranslationsDe root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$de extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Keine Ergebnisse für „${query}“'; @override String searchPrompt({required Object source}) => 'Suche nach Filmen und Serien auf ${source}.'; @override String get searchFailed => 'Suche fehlgeschlagen. Prüfe deine Verbindung und versuche es erneut.'; + @override late final _Translations$explore$badge$de badge = _Translations$explore$badge$de._(_root); + @override late final _Translations$explore$stats$de stats = _Translations$explore$stats$de._(_root); + @override late final _Translations$explore$season$de season = _Translations$explore$season$de._(_root); + @override late final _Translations$explore$format$de format = _Translations$explore$format$de._(_root); + @override late final _Translations$explore$sourceMaterial$de sourceMaterial = _Translations$explore$sourceMaterial$de._(_root); + @override late final _Translations$explore$creditRole$de creditRole = _Translations$explore$creditRole$de._(_root); + @override late final _Translations$explore$relation$de relation = _Translations$explore$relation$de._(_root); + @override String broadcast({required Object day, required Object time}) => 'Läuft ${day} um ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Läuft ${day} um ${time} ${timezone}'; + @override late final _Translations$explore$detail$de detail = _Translations$explore$detail$de._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: '${n} Ergebnis', + other: '${n} Ergebnisse', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$de extends Translations$downloads$en { @override String get editSyncRule => 'Synchronisierungsregel bearbeiten'; @override String get removeSyncRule => 'Synchronisierungsregel entfernen'; @override String removeSyncRuleConfirm({required Object title}) => 'Synchronisierung von „${title}“ beenden? Heruntergeladene Episoden werden behalten.'; + @override String removeListSyncRuleConfirm({required Object title}) => '„${title}“ nicht mehr synchronisieren?'; + @override String get deleteSyncRuleDownloads => 'Zugehörige Downloads ebenfalls löschen'; + @override String get deleteSyncRuleDownloadsDescription => 'Downloads, die von einer anderen Synchronisierungsregel oder einem Profil verwendet werden, bleiben erhalten.'; @override String syncRuleCreated({required Object count}) => 'Synchronisierungsregel erstellt – ${count} ungesehene Episoden werden behalten'; @override String get syncRuleUpdated => 'Synchronisierungsregel aktualisiert'; @override String get syncRuleRemoved => 'Synchronisierungsregel entfernt'; + @override String get syncRuleAndDownloadsRemoved => 'Synchronisierungsregel und zugehörige Downloads entfernt'; + @override String get syncRuleCleanupBusy => 'Synchronisierungsregeln werden gerade aktualisiert. Versuche es gleich noch einmal.'; + @override String get syncRuleCleanupUnavailable => 'Zugehörige Downloads konnten nicht sicher ermittelt werden. Verbinde den Server erneut und versuche es noch einmal, oder entferne die Regel, ohne die Downloads zu löschen.'; @override String syncedNewEpisodes({required Object count, required Object title}) => '${count} neue Episoden für ${title} synchronisiert'; @override String get activeSyncRules => 'Synchronisierungsregeln'; @override String get noSyncRules => 'Keine Synchronisierungsregeln'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$de extends Translations$addServer$en { final TranslationsDe _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product}-Server hinzufügen'; @override String get serverUrls => 'Server-URLs'; @override String get serverUrlsHelper => 'Mehrere URLs möglich, durch Kommas getrennt.'; @override String get findServer => 'Server finden'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Suche nach lokalen ${product}-Servern …'; + @override String localMediaBrowserServers({required Object product}) => 'Lokale ${product}-Server'; @override String get username => 'Benutzername'; @override String get password => 'Passwort'; @override String get signIn => 'Anmelden'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$de extends Translations$addServer$en { @override String get addPlexTitle => 'Mit Plex anmelden'; @override String get pinExpired => 'PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.'; @override String failedToRegisterAccount({required Object error}) => 'Konto konnte nicht registriert werden: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Gib die URL deines ${product}-Servers ein'; @override String get addConnectionTitle => 'Verbindung hinzufügen'; @override String addConnectionTitleScoped({required Object name}) => 'Zu ${name} hinzufügen'; @override String get signInWithPlexCard => 'Mit Plex anmelden'; @override String get signInWithPlexCardSubtitle => 'Dieses Gerät autorisieren. Geteilte Server werden hinzugefügt.'; @override String get signInWithPlexCardSubtitleScoped => 'Ein Plex-Konto autorisieren. Home-Benutzer werden zu Profilen.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Mit ${product} verbinden'; + @override String get connectToMediaBrowserCardSubtitle => 'Gib Server-URL, Benutzername und Passwort ein.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Melde dich bei deinem ${product}-Server an. Wird mit ${name} verknüpft.'; @override String get borrowFromAnotherProfile => 'Von einem anderen Profil ausleihen'; @override String get borrowFromAnotherProfileSubtitle => 'Verbindung eines anderen Profils wiederverwenden. PIN-geschützte Profile erfordern eine PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$de extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get critic => 'Kritiker'; + @override String get audience => 'Publikum'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten-Tomatoes-Kritiker'; + @override String get rottenTomatoesAudience => 'Rotten-Tomatoes-Publikum'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$de extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$de._(TranslationsDe root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$de extends Translations$explore$status$en { @override String get upcoming => 'Demnächst'; } +// Path: explore.badge +class _Translations$explore$badge$de extends Translations$explore$badge$en { + _Translations$explore$badge$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} beliebt'; + @override String rankAiring({required Object n}) => '#${n} derzeit ausgestrahlt'; + @override String rankRated({required Object n}) => '#${n} bewertet'; + @override String rankFavorited({required Object n}) => '#${n} favorisiert'; + @override String rankTrending({required Object n}) => '#${n} angesagt'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} in ${season}'; + @override String watchingNow({required Object n}) => '${n} schauen gerade'; + @override String get available => 'Verfügbar'; + @override String get partiallyAvailable => 'Teilweise verfügbar'; + @override String get availableIn4k => '4K verfügbar'; + @override String get requested => 'Angefragt'; + @override String get pendingApproval => 'Genehmigung ausstehend'; + @override String get processing => 'Wird verarbeitet'; + @override String get declined => 'Abgelehnt'; + @override String get requestFailed => 'Anfrage fehlgeschlagen'; + @override String get requested4k => '4K angefragt'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} Staffeln'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Folge ${episode} in ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Nächste in ${duration}'; + @override String episodesShort({required Object n}) => '${n} Folgen'; + @override String minutesPerEpisode({required Object n}) => '${n} Min./Folge'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$de extends Translations$explore$stats$en { + _Translations$explore$stats$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} gelistet'; + @override String viewersDay({required Object n}) => '${n} heute gesehen'; + @override String viewersWeek({required Object n}) => '${n} diese Woche gesehen'; + @override String viewersMonth({required Object n}) => '${n} diesen Monat gesehen'; + @override String viewersYear({required Object n}) => '${n} dieses Jahr gesehen'; + @override String viewersAllTime({required Object n}) => '${n} Zuschauer'; + @override String planning({required Object n}) => '${n} haben es geplant'; + @override String favorited({required Object n}) => '${n} Favoriten'; + @override String dropRate({required Object percent}) => '${percent} haben es abgebrochen'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: '${n} Kommentar', + other: '${n} Kommentare', + ); + @override String votes({required Object n}) => '${n} Stimmen'; + @override String watching({required Object n}) => '${n} schauen es gerade'; + @override String completed({required Object n}) => '${n} abgeschlossen'; + @override String onHold({required Object n}) => '${n} pausiert'; + @override String dropped({required Object n}) => '${n} abgebrochen'; +} + +// Path: explore.season +class _Translations$explore$season$de extends Translations$explore$season$en { + _Translations$explore$season$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get winter => 'Winter'; + @override String get spring => 'Frühling'; + @override String get summer => 'Sommer'; + @override String get fall => 'Herbst'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$de extends Translations$explore$format$en { + _Translations$explore$format$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV-Kurzfilm'; + @override String get movie => 'Film'; + @override String get special => 'Special'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musik'; + @override String get other => 'Sonstiges'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$de extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get original => 'Original'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light Novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Visual Novel'; + @override String get game => 'Spiel'; + @override String get webComic => 'Webcomic'; + @override String get musicRelease => 'Musik'; + @override String get otherMedia => 'Sonstiges'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$de extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get director => 'Regisseur'; + @override String get writer => 'Autor'; + @override String get producer => 'Produzent'; + @override String get creator => 'Schöpfer'; + @override String get composer => 'Komponist'; +} + +// Path: explore.relation +class _Translations$explore$relation$de extends Translations$explore$relation$en { + _Translations$explore$relation$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Fortsetzung'; + @override String get sideStory => 'Nebengeschichte'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternative Version'; + @override String get summary => 'Zusammenfassung'; + @override String get parentStory => 'Hauptgeschichte'; + @override String get adaptation => 'Adaption'; + @override String get other => 'Verwandt'; +} + +// Path: explore.detail +class _Translations$explore$detail$de extends Translations$explore$detail$en { + _Translations$explore$detail$de._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Originaltitel'; + @override String get alsoKnownAs => 'Auch bekannt als'; + @override String get studios => 'Studios'; + @override String get country => 'Land'; + @override String get language => 'Sprache'; + @override String get released => 'Erschienen'; + @override String get physicalRelease => 'Auf Disc'; + @override String get ended => 'Beendet'; + @override String addedOn({required Object date}) => 'Hinzugefügt am ${date}'; + @override String get yourRating => 'Deine Bewertung'; + @override String get budget => 'Budget'; + @override String get revenue => 'Einspielergebnis'; + @override String get contentAdvisory => 'Altersfreigabe'; + @override String get tags => 'Tags'; + @override String get revealSpoilerTags => 'Spoiler-Tags anzeigen'; + @override String get links => 'Links'; + @override String get watchOn => 'Ansehen auf'; + @override String get watchTrailer => 'Trailer ansehen'; + @override String openOn({required Object site}) => 'Auf ${site} öffnen'; + @override String get crew => 'Crew'; + @override String get ratings => 'Bewertungen'; + @override String get schedule => 'Sendetermine'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: 'Von ${n} Nutzer empfohlen', + other: 'Von ${n} Nutzern empfohlen', + ); + @override String recommendedBy({required Object who}) => 'Empfohlen von ${who}'; + @override String favoritedBy({required Object who}) => 'Favorisiert von ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} noch nicht ausgestrahlt'; + @override String recommendedByPercent({required Object percent}) => 'Von ${percent} der Zuschauer empfohlen'; + @override String get relatedTitles => 'Verwandte Titel'; + @override String get background => 'Hintergrund'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$de extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$de._(TranslationsDe root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$de extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsDe { 'auth.waitingForAuth' => 'Warte auf die Authentifizierung …\nMelde dich über deinen Browser an.', 'auth.useBrowser' => 'Browser verwenden', 'auth.or' => 'oder', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Mit ${product} verbinden', 'auth.useQuickConnect' => 'Quick Connect verwenden', 'auth.quickConnectInstructions' => 'Öffne Quick Connect in Jellyfin und gib diesen Code ein.', 'auth.quickConnectWaiting' => 'Warte auf Bestätigung…', @@ -2248,6 +2654,17 @@ extension on TranslationsDe { 'common.fullscreen' => 'Vollbild', 'common.exitFullscreen' => 'Vollbild verlassen', 'common.pressBackAgainToExit' => 'Zum Beenden erneut Zurück drücken', + 'common.ratingSource.critic' => 'Kritiker', + 'common.ratingSource.audience' => 'Publikum', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten-Tomatoes-Kritiker', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten-Tomatoes-Publikum', 'screens.licenses' => 'Lizenzen', 'screens.switchProfile' => 'Profil wechseln', 'screens.subtitleStyling' => 'Untertitel-Stil', @@ -2284,6 +2701,7 @@ extension on TranslationsDe { 'settings.darkTheme' => 'Dunkel', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Darstellungsdichte der Mediathek', + 'settings.displayScale' => 'Skalierung', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Großzügig', 'settings.tvCornerSpotlightBackdrop' => 'Backdrop in der Ecke', @@ -2333,6 +2751,11 @@ extension on TranslationsDe { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => 'Automatisch (empfohlen)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} MB Speicher verfügbar. Ein Puffer von ${size} MB kann die Wiedergabe beeinträchtigen.', + 'settings.playbackBuffer' => 'Wiedergabepuffer', + 'settings.playbackBufferAuto' => 'Automatisch (empfohlen)', + 'settings.playbackBufferLarge' => 'Groß', + 'settings.playbackBufferExtraLarge' => 'Extra groß', + 'settings.playbackBufferDescription' => 'Puffert mehr gegen instabile Verbindungen. Zusätzlich durch die Puffergröße begrenzt.', 'settings.defaultQualityTitle' => 'Standardqualität', 'settings.musicQualityTitle' => 'Musikqualität', 'settings.subtitleStyling' => 'Untertitel-Stil', @@ -2366,6 +2789,9 @@ extension on TranslationsDe { 'settings.debugLoggingDescription' => 'Detaillierte Protokolle zur Fehleranalyse aktivieren', 'settings.viewLogs' => 'Protokolle anzeigen', 'settings.viewLogsDescription' => 'App-Protokolle anzeigen', + 'settings.clearImageCache' => 'Bildercache leeren', + 'settings.clearImageCacheDescription' => 'Zwischengespeicherte Artworks und Vorschaubilder löschen. Bilder können langsamer laden, bis sie erneut heruntergeladen werden.', + 'settings.clearImageCacheSuccess' => 'Bildercache erfolgreich geleert', 'settings.resetSettings' => 'Einstellungen zurücksetzen', 'settings.resetSettingsDescription' => 'Standardeinstellungen wiederherstellen. Dies kann nicht rückgängig gemacht werden.', 'settings.resetSettingsSuccess' => 'Einstellungen erfolgreich zurückgesetzt', @@ -2549,29 +2975,118 @@ extension on TranslationsDe { 'hotkeys.actions.skipMarker' => 'Intro/Abspann überspringen', 'hotkeys.actions.screenshot' => 'Screenshot aufnehmen', 'fileInfo.title' => 'Dateiinformationen', + 'fileInfo.overview' => 'Übersicht', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Audio', 'fileInfo.subtitles' => 'Untertitel', + 'fileInfo.images' => 'Eingebettete Bilder', + 'fileInfo.dataStreams' => 'Datenstreams', + 'fileInfo.lyrics' => 'Songtexte', 'fileInfo.file' => 'Datei', + 'fileInfo.attachments' => 'Anhänge', + 'fileInfo.delivery' => 'Bereitstellung', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Version ${index} von ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Datei ${index} von ${count}', + 'fileInfo.noStreams' => 'Der Server hat für diese Datei keine Streams gemeldet.', + 'fileInfo.copyPath' => 'Pfad kopieren', + 'fileInfo.pathCopied' => 'Dateipfad kopiert', 'fileInfo.codec' => 'Codec', + 'fileInfo.codecTag' => 'Codec-Tag', 'fileInfo.resolution' => 'Auflösung', + 'fileInfo.codedResolution' => 'Codierte Auflösung', 'fileInfo.bitrate' => 'Bitrate', 'fileInfo.frameRate' => 'Bildrate', + 'fileInfo.rotation' => 'Rotation', + 'fileInfo.comment' => 'Kommentar', + 'fileInfo.audioDescription' => 'Audiodeskription', + 'fileInfo.headerCompression' => 'Header-Komprimierung', + 'fileInfo.sidecarFile' => 'Sidecar-Datei', + 'fileInfo.transportTimestamp' => 'Transport-Zeitstempel', + 'fileInfo.displayOffset' => 'Anzeige-Offset', + 'fileInfo.previewFailureCode' => 'Fehlercode der Vorschau', + 'fileInfo.previewRetries' => 'Vorschau-Wiederholungsversuche', 'fileInfo.aspectRatio' => 'Seitenverhältnis', + 'fileInfo.pixelAspectRatio' => 'Pixel-Seitenverhältnis', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Level', 'fileInfo.bitDepth' => 'Bittiefe', + 'fileInfo.pixelFormat' => 'Pixelformat', 'fileInfo.colorSpace' => 'Farbraum', 'fileInfo.colorRange' => 'Farbbereich', 'fileInfo.colorPrimaries' => 'Primärfarben', + 'fileInfo.colorTransfer' => 'Farbübertragung', 'fileInfo.chromaSubsampling' => 'Chroma-Subsampling', + 'fileInfo.chromaLocation' => 'Chroma-Position', + 'fileInfo.scanType' => 'Scan-Typ', + 'fileInfo.interlaced' => 'Interlaced', + 'fileInfo.anamorphic' => 'Anamorph', + 'fileInfo.referenceFrames' => 'Referenzbilder', + 'fileInfo.dynamicRange' => 'Dynamikbereich', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby-Vision-Level', + 'fileInfo.dolbyVisionVersion' => 'Dolby-Vision-Version', + 'fileInfo.dolbyVisionLayers' => 'Dolby-Vision-Ebenen', + 'fileInfo.baseLayerCompatibility' => 'Kompatibilität der Basisebene', + 'fileInfo.avcBitstream' => 'AVC-Bitstream', + 'fileInfo.nalLengthSize' => 'NAL-Längengröße', + 'fileInfo.scalingMatrix' => 'Benutzerdefinierte Skalierungsmatrix', + 'fileInfo.streamIdentifier' => 'Stream-Kennung', + 'fileInfo.streamIndex' => 'Stream-Index', + 'fileInfo.streamId' => 'Stream-ID', + 'fileInfo.language' => 'Sprache', + 'fileInfo.languageCode' => 'Sprachcode', + 'fileInfo.streamTitle' => 'Track-Titel', 'fileInfo.channels' => 'Kanäle', + 'fileInfo.sampleRate' => 'Abtastrate', + 'fileInfo.spatialAudio' => 'Räumliches Audio', + 'fileInfo.textBased' => 'Textbasiert', + 'fileInfo.subtitleFormat' => 'Sidecar-Format', + 'fileInfo.provider' => 'Anbieter', + 'fileInfo.matchScore' => 'Übereinstimmungswert', + 'fileInfo.externalDelivery' => 'Kann separat bereitgestellt werden', + 'fileInfo.sidecarPath' => 'Sidecar-Pfad', + 'fileInfo.sourceStream' => 'Kopiert von', + 'fileInfo.temporary' => 'Temporär', + 'fileInfo.timeBase' => 'Zeitbasis', 'fileInfo.overallBitrate' => 'Gesamtbitrate', 'fileInfo.path' => 'Pfad', + 'fileInfo.fileName' => 'Dateiname', 'fileInfo.size' => 'Größe', + 'fileInfo.totalSize' => 'Gesamtgröße', 'fileInfo.container' => 'Container', 'fileInfo.duration' => 'Dauer', + 'fileInfo.previewThumbnails' => 'Vorschaubilder', + 'fileInfo.previewIndex' => 'Vorschau-Index', + 'fileInfo.packetLength' => 'Paketlänge', + 'fileInfo.filePresent' => 'Datei vorhanden', + 'fileInfo.fileReadable' => 'Vom Server lesbar', + 'fileInfo.streamPath' => 'Stream-Pfad', 'fileInfo.optimizedForStreaming' => 'Für Streaming optimiert', 'fileInfo.has64bitOffsets' => '64-Bit-Offsets', + 'fileInfo.protocol' => 'Protokoll', + 'fileInfo.mediaType' => 'Medientyp', + 'fileInfo.sourceKind' => 'Quellenart', + 'fileInfo.optimizedVersion' => 'Optimierte Version', + 'fileInfo.optimizationTarget' => 'Optimierungsziel', + 'fileInfo.deletedAt' => 'Gelöscht', + 'fileInfo.remoteSource' => 'Remote-Quelle', + 'fileInfo.infiniteStream' => 'Endlos-Stream', + 'fileInfo.directPlay' => 'Direct Play', + 'fileInfo.directStream' => 'Direct Stream', + 'fileInfo.transcoding' => 'Transkodierung', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Versions-ID', + 'fileInfo.fileId' => 'Datei-ID', + 'fileInfo.defaultAudioTrack' => 'Standard-Audiospur', + 'fileInfo.defaultSubtitleTrack' => 'Standard-Untertitelspur', + 'fileInfo.subtitlesOff' => 'Aus', + 'fileInfo.flagDefault' => 'Standard', + 'fileInfo.flagForced' => 'Erzwungen', + 'fileInfo.flagSelected' => 'Ausgewählt', + 'fileInfo.flagExternal' => 'Extern', + 'fileInfo.flagHearingImpaired' => 'Für Hörgeschädigte', + 'fileInfo.flagDub' => 'Dub', + 'fileInfo.flagOriginal' => 'Original', 'mediaMenu.markAsWatched' => 'Als gesehen markieren', 'mediaMenu.markAsUnwatched' => 'Als ungesehen markieren', 'mediaMenu.removeFromContinueWatching' => 'Aus ‚Weiterschauen‘ entfernen', @@ -2580,7 +3095,28 @@ extension on TranslationsDe { 'mediaMenu.shufflePlay' => 'Zufallswiedergabe', 'mediaMenu.shuffleNotAvailableOffline' => 'Zufallswiedergabe ist offline nicht verfügbar', 'mediaMenu.fileInfo' => 'Dateiinfo', + 'mediaMenu.deleteEpisodeFromServer' => 'Folge vom Server löschen', + 'mediaMenu.deleteSeasonFromServer' => 'Staffel vom Server löschen', + 'mediaMenu.deleteShowFromServer' => 'Serie vom Server löschen', + 'mediaMenu.deleteMovieFromServer' => 'Film vom Server löschen', + 'mediaMenu.deleteEpisodeTitle' => 'Diese Folge löschen?', + 'mediaMenu.deleteSeasonTitle' => 'Diese Staffel löschen?', + 'mediaMenu.deleteShowTitle' => 'Diese Serie löschen?', + 'mediaMenu.deleteMovieTitle' => 'Diesen Film löschen?', + 'mediaMenu.deleteEpisodeConfirm' => 'Folge löschen', + 'mediaMenu.deleteSeasonConfirm' => 'Staffel löschen', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Serie löschen', + 'mediaMenu.deleteMovieConfirm' => 'Film löschen', + 'mediaMenu.deleteAnyway' => 'Trotzdem löschen', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '„${title}“ dauerhaft von deinem Server löschen?', 'mediaMenu.deleteMultipleWarning' => 'Dies umfasst alle Episoden und deren Dateien.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: 'Dies löscht alle ${n} Folge darin sowie ihre Datei.', other: 'Dies löscht alle ${n} Folgen darin sowie ihre Dateien.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: 'Dieses Element ist als ${n} Datei gespeichert, die gelöscht wird.', other: 'Dieses Element ist über ${n} Dateien verteilt gespeichert, die alle gelöscht werden.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: '${n} weitere Folge ist in derselben Datei gespeichert und wird ebenfalls gelöscht:', other: '${n} weitere Folgen sind in derselben Datei gespeichert und werden ebenfalls gelöscht:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy konnte nicht prüfen, welche Dateien dadurch entfernt werden. Es könnte also mehr gelöscht werden als das oben genannte Element. Brich ab und versuche es erneut, oder lösche trotzdem.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Dein Server hat für dieses Element keine Dateidetails bereitgestellt, daher kann Plezy nicht prüfen, welche Dateien entfernt werden. Es könnte mehr gelöscht werden als das oben genannte Element.', 'mediaMenu.mediaDeletedSuccessfully' => 'Medienelement gelöscht', 'mediaMenu.mediaFailedToDelete' => 'Medienelement konnte nicht gelöscht werden', 'mediaMenu.rate' => 'Bewerten', @@ -2646,6 +3182,9 @@ extension on TranslationsDe { 'videoControls.playNext' => 'Nächstes abspielen', 'videoControls.playButton' => 'Abspielen', 'videoControls.pauseButton' => 'Pause', + 'videoControls.playbackPaused' => 'Pausiert', + 'videoControls.playbackResumed' => 'Wird abgespielt', + 'videoControls.loadingVideo' => 'Video wird geladen', 'videoControls.showPlaybackControls' => 'Wiedergabesteuerung anzeigen', 'videoControls.hidePlaybackControls' => 'Wiedergabesteuerung ausblenden', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} Sekunden zurück', @@ -2700,8 +3239,6 @@ extension on TranslationsDe { 'videoControls.subtitleDownloaded' => 'Untertitel heruntergeladen', 'videoControls.subtitleDownloadedNotApplied' => 'Der Untertitel wurde heruntergeladen, konnte aber nicht ausgewählt werden', 'videoControls.subtitleDownloadFailed' => 'Untertitel konnte nicht heruntergeladen werden', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Sprachen suchen...', 'messages.markedAsWatched' => 'Als gesehen markiert', 'messages.markedAsUnwatched' => 'Als ungesehen markiert', @@ -2711,6 +3248,7 @@ extension on TranslationsDe { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: 'Automatisch entfernt: ${n} angesehener Download', other: 'Automatisch entfernt: ${n} angesehene Downloads', ), 'messages.removedFromContinueWatching' => 'Aus „Weiterschauen“ entfernt', 'messages.errorLoading' => ({required Object error}) => 'Fehler: ${error}', + 'messages.searchPartialResults' => 'Einige Medienserver konnten nicht durchsucht werden. Verfügbare Ergebnisse werden angezeigt.', 'messages.streamInterrupted' => 'Der Stream wurde unterbrochen. Drücke auf Wiedergabe oder spule, um es erneut zu versuchen.', 'messages.liveStreamInterrupted' => 'Der Livestream wurde unterbrochen. Drücke auf Wiedergabe, um es erneut zu versuchen.', 'messages.fileInfoNotAvailable' => 'Dateiinfo nicht verfügbar', @@ -2749,6 +3287,8 @@ extension on TranslationsDe { 'messages.switchingToCompatiblePlayer' => 'Wechsel zu einem kompatiblen Player …', 'messages.serverLimitTitle' => 'Wiedergabe fehlgeschlagen', 'messages.serverLimitBody' => 'Serverfehler (HTTP 500). Vermutlich hat ein Bandbreiten- oder Transkodierungslimit diese Sitzung abgelehnt. Bitte den Besitzer, das Limit anzupassen.', + 'messages.mediaUnreadableTitle' => 'Datei nicht verfügbar', + 'messages.mediaUnreadableBody' => 'Der Server hat dieses Element gefunden, konnte seine Datei aber nicht lesen (HTTP 404). Die Datei wurde wahrscheinlich verschoben oder gelöscht, oder ihr Speicher ist offline. Bitte den Serverbesitzer, die Datei zu prüfen und die Mediathek neu zu scannen.', 'messages.logsUploaded' => 'Protokolle hochgeladen', 'messages.logsUploadFailed' => 'Protokolle konnten nicht hochgeladen werden', 'messages.logId' => 'Protokoll-ID', @@ -2857,6 +3397,8 @@ extension on TranslationsDe { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sitzung für ${name} abgelaufen', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sitzungen für ${count} Server abgelaufen', 'connections.signInAgain' => 'Erneut anmelden', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Verbindung zu ${product} bearbeiten', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'URLs für ${serverName} hinzufügen oder entfernen. Plezy verwendet die erreichbare URL mit der geringsten Latenz.', 'discover.title' => 'Entdecken', 'discover.noContentAvailable' => 'Kein Inhalt verfügbar', 'discover.addMediaToLibraries' => 'Medien zur Mediathek hinzufügen', @@ -2882,6 +3424,7 @@ extension on TranslationsDe { 'discover.minutesLeft' => ({required Object minutes}) => 'Noch ${minutes} Min.', 'discover.moreLikeThis' => 'Ähnliche Inhalte', 'errors.searchFailed' => ({required Object error}) => 'Suche fehlgeschlagen: ${error}', + 'errors.searchUnavailable' => 'Die Suche konnte keinen Medienserver erreichen.', 'errors.connectionTimeout' => ({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}', 'errors.connectionFailed' => 'Keine Verbindung zum Medienserver möglich', 'errors.unableToLoad' => ({required Object context}) => '${context} konnte nicht geladen werden. Bitte erneut versuchen.', @@ -2989,6 +3532,36 @@ extension on TranslationsDe { 'logs.clearLogs' => 'Protokolle löschen', 'logs.copyLogs' => 'Protokolle kopieren', 'logs.uploadLogs' => 'Protokolle hochladen', + 'startup.failedTitle' => 'Plezy konnte nicht gestartet werden', + 'startup.failedBody' => 'Beim Start ist etwas schiefgelaufen. Die Details unten zeigen, was fehlgeschlagen ist.', + 'startup.failedBodyRepairable' => 'Die gespeicherte Einstellungsdatei von Plezy ist beschädigt und muss neu aufgebaut werden, bevor Plezy starten kann. Erneutes Versuchen hilft nicht – wähle „Speicher reparieren“.', + 'startup.phaseLabel' => 'Schritt', + 'startup.showDetails' => 'Details anzeigen', + 'startup.hideDetails' => 'Details ausblenden', + 'startup.copyDetails' => 'Details kopieren', + 'startup.detailsCopied' => 'Details in die Zwischenablage kopiert', + 'startup.uploadDetails' => 'Details hochladen', + 'startup.repairStorage' => 'Speicher reparieren', + 'startup.repairTitle' => 'Gespeicherte Daten reparieren?', + 'startup.repairBodyCommon' => 'Die Einstellungsdatei von Plezy ist beschädigt und kann nicht gelesen werden. Beim Reparieren werden alle Einstellungen auf ihre Standardwerte zurückgesetzt.', + 'startup.repairBodyOneCredential' => 'Eine gespeicherte Anmeldung ist beschädigt und kann nicht gelesen werden. Beim Reparieren wird nur diese entfernt; deine übrigen Einstellungen bleiben unangetastet.', + 'startup.repairBodySignInsKept' => 'Deine Server und Profile sollten angemeldet bleiben.', + 'startup.repairBodySignInsLost' => 'Der Schlüssel, der deine gespeicherten Anmeldungen schützt, kann aus dieser Datei nicht wiederhergestellt werden. Du musst dich daher bei jedem Server und Profil erneut anmelden. Auf deinem Medienserver ändert sich nichts.', + 'startup.repairBodySessionsUncertain' => 'Tracker (MAL, AniList, Simkl, Trakt) und Seerr werden separat gespeichert und können erhalten bleiben oder auch nicht. Plezy teilt dir genau mit, was erhalten blieb.', + 'startup.repairConfirm' => 'Reparieren', + 'startup.repairSucceeded' => 'Speicher repariert', + 'startup.repairNeedsRestart' => 'Speicher repariert – Neustart erforderlich', + 'startup.restartRequiredBody' => 'Deine Daten wurden repariert, aber Plezy muss neu starten, bevor es sie verwenden kann. Schließe Plezy und öffne es erneut.', + 'startup.quitPlezy' => 'Plezy beenden', + 'startup.repairFailed' => 'Reparatur fehlgeschlagen', + 'startup.repairKeptSignIns' => 'Deine Server und Profile sind weiterhin angemeldet.', + 'startup.repairLostSignIns' => 'Der Schlüssel, der deine gespeicherten Anmeldungen schützt, konnte nicht wiederhergestellt werden. Du musst dich bei jedem Server und Profil erneut anmelden.', + 'startup.repairLostSessions' => 'Mindestens eine Tracker- oder Seerr-Verbindung ging verloren und muss neu verbunden werden.', + 'startup.backupTitle' => 'Eine Kopie der beschädigten Datei wurde aufbewahrt', + 'startup.backupWarning' => 'Sie enthält deine Anmeldedaten. Lade sie nicht hoch und teile sie nicht.', + 'startup.deleteBackup' => 'Kopie löschen', + 'startup.backupDeleted' => 'Kopie gelöscht.', + 'startup.previousFailureTitle' => 'Plezy konnte beim letzten Mal nicht starten', 'licenses.relatedPackages' => 'Verwandte Pakete', 'licenses.license' => 'Lizenz', 'licenses.licenseNumber' => ({required Object number}) => 'Lizenz ${number}', @@ -3032,6 +3605,113 @@ extension on TranslationsDe { 'explore.searchEmpty' => ({required Object query}) => 'Keine Ergebnisse für „${query}“', 'explore.searchPrompt' => ({required Object source}) => 'Suche nach Filmen und Serien auf ${source}.', 'explore.searchFailed' => 'Suche fehlgeschlagen. Prüfe deine Verbindung und versuche es erneut.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} beliebt', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} derzeit ausgestrahlt', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} bewertet', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favorisiert', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} angesagt', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} in ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} schauen gerade', + 'explore.badge.available' => 'Verfügbar', + 'explore.badge.partiallyAvailable' => 'Teilweise verfügbar', + 'explore.badge.availableIn4k' => '4K verfügbar', + 'explore.badge.requested' => 'Angefragt', + 'explore.badge.pendingApproval' => 'Genehmigung ausstehend', + 'explore.badge.processing' => 'Wird verarbeitet', + 'explore.badge.declined' => 'Abgelehnt', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Anfrage fehlgeschlagen', + 'explore.badge.requested4k' => '4K angefragt', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} Staffeln', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Folge ${episode} in ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Nächste in ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} Folgen', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} Min./Folge', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} gelistet', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} heute gesehen', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} diese Woche gesehen', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} diesen Monat gesehen', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} dieses Jahr gesehen', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} Zuschauer', + 'explore.stats.planning' => ({required Object n}) => '${n} haben es geplant', + 'explore.stats.favorited' => ({required Object n}) => '${n} Favoriten', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} haben es abgebrochen', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: '${n} Kommentar', other: '${n} Kommentare', ), + 'explore.stats.votes' => ({required Object n}) => '${n} Stimmen', + 'explore.stats.watching' => ({required Object n}) => '${n} schauen es gerade', + 'explore.stats.completed' => ({required Object n}) => '${n} abgeschlossen', + 'explore.stats.onHold' => ({required Object n}) => '${n} pausiert', + 'explore.stats.dropped' => ({required Object n}) => '${n} abgebrochen', + 'explore.season.winter' => 'Winter', + 'explore.season.spring' => 'Frühling', + 'explore.season.summer' => 'Sommer', + 'explore.season.fall' => 'Herbst', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV-Kurzfilm', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Special', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musik', + 'explore.format.other' => 'Sonstiges', + 'explore.sourceMaterial.original' => 'Original', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light Novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Visual Novel', + 'explore.sourceMaterial.game' => 'Spiel', + 'explore.sourceMaterial.webComic' => 'Webcomic', + 'explore.sourceMaterial.musicRelease' => 'Musik', + 'explore.sourceMaterial.otherMedia' => 'Sonstiges', + 'explore.creditRole.director' => 'Regisseur', + 'explore.creditRole.writer' => 'Autor', + 'explore.creditRole.producer' => 'Produzent', + 'explore.creditRole.creator' => 'Schöpfer', + 'explore.creditRole.composer' => 'Komponist', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Fortsetzung', + 'explore.relation.sideStory' => 'Nebengeschichte', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternative Version', + 'explore.relation.summary' => 'Zusammenfassung', + 'explore.relation.parentStory' => 'Hauptgeschichte', + 'explore.relation.adaptation' => 'Adaption', + 'explore.relation.other' => 'Verwandt', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Läuft ${day} um ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Läuft ${day} um ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Originaltitel', + 'explore.detail.alsoKnownAs' => 'Auch bekannt als', + 'explore.detail.studios' => 'Studios', + 'explore.detail.country' => 'Land', + 'explore.detail.language' => 'Sprache', + 'explore.detail.released' => 'Erschienen', + 'explore.detail.physicalRelease' => 'Auf Disc', + 'explore.detail.ended' => 'Beendet', + 'explore.detail.addedOn' => ({required Object date}) => 'Hinzugefügt am ${date}', + 'explore.detail.yourRating' => 'Deine Bewertung', + 'explore.detail.budget' => 'Budget', + 'explore.detail.revenue' => 'Einspielergebnis', + 'explore.detail.contentAdvisory' => 'Altersfreigabe', + 'explore.detail.tags' => 'Tags', + 'explore.detail.revealSpoilerTags' => 'Spoiler-Tags anzeigen', + 'explore.detail.links' => 'Links', + 'explore.detail.watchOn' => 'Ansehen auf', + 'explore.detail.watchTrailer' => 'Trailer ansehen', + 'explore.detail.openOn' => ({required Object site}) => 'Auf ${site} öffnen', + 'explore.detail.crew' => 'Crew', + 'explore.detail.ratings' => 'Bewertungen', + 'explore.detail.schedule' => 'Sendetermine', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: 'Von ${n} Nutzer empfohlen', other: 'Von ${n} Nutzern empfohlen', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Empfohlen von ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Favorisiert von ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} noch nicht ausgestrahlt', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Von ${percent} der Zuschauer empfohlen', + 'explore.detail.relatedTitles' => 'Verwandte Titel', + 'explore.detail.background' => 'Hintergrund', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: '${n} Ergebnis', other: '${n} Ergebnisse', ), 'liveTv.title' => 'Live-TV', 'liveTv.guide' => 'TV-Programm', 'liveTv.noChannels' => 'Keine Kanäle verfügbar', @@ -3214,8 +3894,6 @@ extension on TranslationsDe { 'watchTogether.relayUnreachable' => 'Relay-Server nicht erreichbar. Eine Sperre durch den Internetanbieter kann gemeinsames Schauen verhindern.', 'watchTogether.reconnectingToHost' => 'Verbindung zum Host wird wiederhergestellt …', 'watchTogether.currentPlayback' => 'Aktuelle Wiedergabe', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Aktueller Wiedergabe beitreten', 'watchTogether.joinCurrentPlaybackDescription' => 'Zu dem Inhalt wechseln, den der Host gerade ansieht', 'watchTogether.failedToOpenCurrentPlayback' => 'Aktuelle Wiedergabe konnte nicht geöffnet werden', @@ -3284,9 +3962,15 @@ extension on TranslationsDe { 'downloads.editSyncRule' => 'Synchronisierungsregel bearbeiten', 'downloads.removeSyncRule' => 'Synchronisierungsregel entfernen', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Synchronisierung von „${title}“ beenden? Heruntergeladene Episoden werden behalten.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => '„${title}“ nicht mehr synchronisieren?', + 'downloads.deleteSyncRuleDownloads' => 'Zugehörige Downloads ebenfalls löschen', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Downloads, die von einer anderen Synchronisierungsregel oder einem Profil verwendet werden, bleiben erhalten.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Synchronisierungsregel erstellt – ${count} ungesehene Episoden werden behalten', 'downloads.syncRuleUpdated' => 'Synchronisierungsregel aktualisiert', 'downloads.syncRuleRemoved' => 'Synchronisierungsregel entfernt', + 'downloads.syncRuleAndDownloadsRemoved' => 'Synchronisierungsregel und zugehörige Downloads entfernt', + 'downloads.syncRuleCleanupBusy' => 'Synchronisierungsregeln werden gerade aktualisiert. Versuche es gleich noch einmal.', + 'downloads.syncRuleCleanupUnavailable' => 'Zugehörige Downloads konnten nicht sicher ermittelt werden. Verbinde den Server erneut und versuche es noch einmal, oder entferne die Regel, ohne die Downloads zu löschen.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} neue Episoden für ${title} synchronisiert', 'downloads.activeSyncRules' => 'Synchronisierungsregeln', 'downloads.noSyncRules' => 'Keine Synchronisierungsregeln', @@ -3449,6 +4133,8 @@ extension on TranslationsDe { 'performanceOverlay.dvRpus' => 'DV-RPUs', 'performanceOverlay.dvRpuAverage' => 'DV-RPU Ø', 'performanceOverlay.dvSampleAverage' => 'DV-Sample Ø', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Max. Luma', 'performanceOverlay.minLuma' => 'Min. Luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsDe { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Plezy auf ${service} aktivieren', 'services.deviceCode.body' => ({required Object url}) => 'Gehe zu ${url} und gib diesen Code ein:', 'services.deviceCode.openToActivate' => ({required Object service}) => '${service} zum Aktivieren öffnen', @@ -3641,9 +4328,12 @@ extension on TranslationsDe { 'services.libraryFilter.modeHintWhitelist' => 'Nur die unten markierten Mediatheken synchronisieren.', 'services.libraryFilter.libraries' => 'Mediatheken', 'services.libraryFilter.noLibraries' => 'Keine Mediatheken verfügbar', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product}-Server hinzufügen', 'addServer.serverUrls' => 'Server-URLs', 'addServer.serverUrlsHelper' => 'Mehrere URLs möglich, durch Kommas getrennt.', 'addServer.findServer' => 'Server finden', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Suche nach lokalen ${product}-Servern …', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Lokale ${product}-Server', 'addServer.username' => 'Benutzername', 'addServer.password' => 'Passwort', 'addServer.signIn' => 'Anmelden', @@ -3655,11 +4345,15 @@ extension on TranslationsDe { 'addServer.addPlexTitle' => 'Mit Plex anmelden', 'addServer.pinExpired' => 'PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Konto konnte nicht registriert werden: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Gib die URL deines ${product}-Servers ein', 'addServer.addConnectionTitle' => 'Verbindung hinzufügen', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Zu ${name} hinzufügen', 'addServer.signInWithPlexCard' => 'Mit Plex anmelden', 'addServer.signInWithPlexCardSubtitle' => 'Dieses Gerät autorisieren. Geteilte Server werden hinzugefügt.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Ein Plex-Konto autorisieren. Home-Benutzer werden zu Profilen.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Mit ${product} verbinden', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Gib Server-URL, Benutzername und Passwort ein.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Melde dich bei deinem ${product}-Server an. Wird mit ${name} verknüpft.', 'addServer.borrowFromAnotherProfile' => 'Von einem anderen Profil ausleihen', 'addServer.borrowFromAnotherProfileSubtitle' => 'Verbindung eines anderen Profils wiederverwenden. PIN-geschützte Profile erfordern eine PIN.', _ => null, diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index ec06012e..750c765e 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -67,6 +67,7 @@ class TranslationsEs extends Translations with BaseTranslations 'Esperando autenticación...\nInicia sesión desde tu navegador.'; @override String get useBrowser => 'Usar navegador'; @override String get or => 'o'; + @override String connectToMediaBrowser({required Object product}) => 'Conectar a ${product}'; @override String get useQuickConnect => 'Usar Quick Connect'; @override String get quickConnectInstructions => 'Abre Quick Connect en Jellyfin e introduce este código.'; @override String get quickConnectWaiting => 'Esperando aprobación…'; @@ -175,6 +177,7 @@ class _Translations$common$es extends Translations$common$en { @override String get fullscreen => 'Pantalla completa'; @override String get exitFullscreen => 'Salir de pantalla completa'; @override String get pressBackAgainToExit => 'Pulsa Atrás de nuevo para salir'; + @override late final _Translations$common$ratingSource$es ratingSource = _Translations$common$ratingSource$es._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$es extends Translations$settings$en { @override String get darkTheme => 'Oscuro'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Densidad de la biblioteca'; + @override String get displayScale => 'Escala de visualización'; @override String get compact => 'Compacto'; @override String get comfortable => 'Cómodo'; @override String get tvCornerSpotlightBackdrop => 'Imagen destacada en la esquina'; @@ -287,6 +291,11 @@ class _Translations$settings$es extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => 'Automático (recomendado)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} MB de memoria disponible. Un búfer de ${size} MB puede afectar a la reproducción.'; + @override String get playbackBuffer => 'Búfer de reproducción'; + @override String get playbackBufferAuto => 'Automático (recomendado)'; + @override String get playbackBufferLarge => 'Grande'; + @override String get playbackBufferExtraLarge => 'Extra grande'; + @override String get playbackBufferDescription => 'Almacena más en búfer para conexiones inestables. También limitado por el tamaño del búfer.'; @override String get defaultQualityTitle => 'Calidad predeterminada'; @override String get musicQualityTitle => 'Calidad de música'; @override String get subtitleStyling => 'Estilo de subtítulos'; @@ -320,6 +329,9 @@ class _Translations$settings$es extends Translations$settings$en { @override String get debugLoggingDescription => 'Habilitar registros detallados para solucionar problemas'; @override String get viewLogs => 'Ver registros'; @override String get viewLogsDescription => 'Ver los registros de la aplicación'; + @override String get clearImageCache => 'Vaciar caché de imágenes'; + @override String get clearImageCacheDescription => 'Borra las carátulas y miniaturas guardadas en caché. Las imágenes pueden tardar más en cargar hasta que se descarguen de nuevo.'; + @override String get clearImageCacheSuccess => 'Caché de imágenes vaciada correctamente'; @override String get resetSettings => 'Restablecer configuración'; @override String get resetSettingsDescription => 'Restaurar ajustes predeterminados. No se puede deshacer.'; @override String get resetSettingsSuccess => 'Configuración restablecida con éxito'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$es extends Translations$fileInfo$en { // Translations @override String get title => 'Información del archivo'; + @override String get overview => 'Resumen'; @override String get video => 'Video'; @override String get audio => 'Audio'; @override String get subtitles => 'Subtítulos'; + @override String get images => 'Imágenes incrustadas'; + @override String get dataStreams => 'Flujos de datos'; + @override String get lyrics => 'Letras'; @override String get file => 'Archivo'; + @override String get attachments => 'Archivos adjuntos'; + @override String get delivery => 'Entrega'; + @override String versionCounter({required Object index, required Object count}) => 'Versión ${index} de ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Archivo ${index} de ${count}'; + @override String get noStreams => 'El servidor no informó de ningún flujo para este archivo.'; + @override String get copyPath => 'Copiar ruta'; + @override String get pathCopied => 'Ruta del archivo copiada'; @override String get codec => 'Códec'; + @override String get codecTag => 'Etiqueta de códec'; @override String get resolution => 'Resolución'; + @override String get codedResolution => 'Resolución codificada'; @override String get bitrate => 'Tasa de bits'; @override String get frameRate => 'Frecuencia de fotogramas'; + @override String get rotation => 'Rotación'; + @override String get comment => 'Comentario'; + @override String get audioDescription => 'Audiodescripción'; + @override String get headerCompression => 'Compresión de cabecera'; + @override String get sidecarFile => 'Archivo auxiliar'; + @override String get transportTimestamp => 'Marca de tiempo de transporte'; + @override String get displayOffset => 'Desplazamiento de visualización'; + @override String get previewFailureCode => 'Código de error de vista previa'; + @override String get previewRetries => 'Reintentos de vista previa'; @override String get aspectRatio => 'Relación de aspecto'; + @override String get pixelAspectRatio => 'Relación de aspecto de píxel'; @override String get profile => 'Perfil'; + @override String get level => 'Nivel'; @override String get bitDepth => 'Profundidad de bits'; + @override String get pixelFormat => 'Formato de píxel'; @override String get colorSpace => 'Espacio de color'; @override String get colorRange => 'Rango de color'; @override String get colorPrimaries => 'Primarias de color'; + @override String get colorTransfer => 'Transferencia de color'; @override String get chromaSubsampling => 'Submuestreo de croma'; + @override String get chromaLocation => 'Ubicación de crominancia'; + @override String get scanType => 'Tipo de escaneo'; + @override String get interlaced => 'Entrelazado'; + @override String get anamorphic => 'Anamórfico'; + @override String get referenceFrames => 'Fotogramas de referencia'; + @override String get dynamicRange => 'Rango dinámico'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Nivel de Dolby Vision'; + @override String get dolbyVisionVersion => 'Versión de Dolby Vision'; + @override String get dolbyVisionLayers => 'Capas de Dolby Vision'; + @override String get baseLayerCompatibility => 'Compatibilidad de capa base'; + @override String get avcBitstream => 'Flujo de bits AVC'; + @override String get nalLengthSize => 'Tamaño de longitud NAL'; + @override String get scalingMatrix => 'Matriz de escalado personalizada'; + @override String get streamIdentifier => 'Identificador de flujo'; + @override String get streamIndex => 'Índice de flujo'; + @override String get streamId => 'ID de flujo'; + @override String get language => 'Idioma'; + @override String get languageCode => 'Código de idioma'; + @override String get streamTitle => 'Título de la pista'; @override String get channels => 'Canales'; + @override String get sampleRate => 'Frecuencia de muestreo'; + @override String get spatialAudio => 'Audio espacial'; + @override String get textBased => 'Basado en texto'; + @override String get subtitleFormat => 'Formato de archivo auxiliar'; + @override String get provider => 'Proveedor'; + @override String get matchScore => 'Puntuación de coincidencia'; + @override String get externalDelivery => 'Puede servirse por separado'; + @override String get sidecarPath => 'Ruta del archivo auxiliar'; + @override String get sourceStream => 'Copiado de'; + @override String get temporary => 'Temporal'; + @override String get timeBase => 'Base de tiempo'; @override String get overallBitrate => 'Tasa de bits total'; @override String get path => 'Ruta'; + @override String get fileName => 'Nombre de archivo'; @override String get size => 'Tamaño'; + @override String get totalSize => 'Tamaño total'; @override String get container => 'Contenedor'; @override String get duration => 'Duración'; + @override String get previewThumbnails => 'Miniaturas de vista previa'; + @override String get previewIndex => 'Índice de vista previa'; + @override String get packetLength => 'Longitud del paquete'; + @override String get filePresent => 'Archivo presente'; + @override String get fileReadable => 'Legible por el servidor'; + @override String get streamPath => 'Ruta del flujo'; @override String get optimizedForStreaming => 'Optimizado para transmisión'; @override String get has64bitOffsets => 'Desplazamientos de 64 bits'; + @override String get protocol => 'Protocolo'; + @override String get mediaType => 'Tipo de medio'; + @override String get sourceKind => 'Tipo de origen'; + @override String get optimizedVersion => 'Versión optimizada'; + @override String get optimizationTarget => 'Destino de optimización'; + @override String get deletedAt => 'Eliminado'; + @override String get remoteSource => 'Origen remoto'; + @override String get infiniteStream => 'Flujo infinito'; + @override String get directPlay => 'Reproducción directa'; + @override String get directStream => 'Flujo directo'; + @override String get transcoding => 'Transcodificación'; + @override String get etag => 'ETag'; + @override String get versionId => 'ID de versión'; + @override String get fileId => 'ID de archivo'; + @override String get defaultAudioTrack => 'Pista de audio predeterminada'; + @override String get defaultSubtitleTrack => 'Pista de subtítulos predeterminada'; + @override String get subtitlesOff => 'Desactivados'; + @override String get flagDefault => 'Predeterminada'; + @override String get flagForced => 'Forzada'; + @override String get flagSelected => 'Seleccionada'; + @override String get flagExternal => 'Externa'; + @override String get flagHearingImpaired => 'Para personas con discapacidad auditiva'; + @override String get flagDub => 'Doblaje'; + @override String get flagOriginal => 'Original'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$es extends Translations$mediaMenu$en { @override String get shufflePlay => 'Reproducción aleatoria'; @override String get shuffleNotAvailableOffline => 'La reproducción aleatoria no está disponible sin conexión'; @override String get fileInfo => 'Información del archivo'; + @override String get deleteEpisodeFromServer => 'Eliminar el episodio del servidor'; + @override String get deleteSeasonFromServer => 'Eliminar la temporada del servidor'; + @override String get deleteShowFromServer => 'Eliminar la serie del servidor'; + @override String get deleteMovieFromServer => 'Eliminar la película del servidor'; + @override String get deleteEpisodeTitle => '¿Eliminar este episodio?'; + @override String get deleteSeasonTitle => '¿Eliminar esta temporada?'; + @override String get deleteShowTitle => '¿Eliminar esta serie?'; + @override String get deleteMovieTitle => '¿Eliminar esta película?'; + @override String get deleteEpisodeConfirm => 'Eliminar episodio'; + @override String get deleteSeasonConfirm => 'Eliminar temporada'; + @override String get deleteShowConfirm => 'Eliminar serie'; + @override String get deleteMovieConfirm => 'Eliminar película'; + @override String get deleteAnyway => 'Eliminar de todos modos'; + @override String confirmDeleteTarget({required Object title}) => '¿Eliminar definitivamente ${title} de tu servidor?'; @override String get deleteMultipleWarning => 'Esto incluye todos los episodios y sus archivos.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: 'Esto elimina el único episodio que contiene y su archivo.', + other: 'Esto elimina los ${n} episodios que contiene y sus archivos.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: 'Este elemento se almacena en ${n} archivo, que se eliminará.', + other: 'Este elemento se almacena en ${n} archivos, y todos se eliminarán.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: '${n} episodio más se almacena en el mismo archivo y también se eliminará:', + other: '${n} episodios más se almacenan en el mismo archivo y también se eliminarán:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy no pudo comprobar qué archivos se eliminarán, por lo que podría borrar más de lo indicado arriba. Cancela y vuelve a intentarlo, o elimina de todos modos.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Tu servidor no proporcionó los detalles del archivo de este elemento, por lo que Plezy no puede comprobar qué archivos se eliminarán. Podría borrar más de lo indicado arriba.'; @override String get mediaDeletedSuccessfully => 'Elemento multimedia eliminado con éxito'; @override String get mediaFailedToDelete => 'Error al eliminar el elemento multimedia'; @override String get rate => 'Calificar'; @@ -657,6 +786,9 @@ class _Translations$videoControls$es extends Translations$videoControls$en { @override String get playNext => 'Reproducir siguiente'; @override String get playButton => 'Reproducir'; @override String get pauseButton => 'Pausar'; + @override String get playbackPaused => 'En pausa'; + @override String get playbackResumed => 'Reproduciendo'; + @override String get loadingVideo => 'Cargando el vídeo'; @override String get showPlaybackControls => 'Mostrar controles de reproducción'; @override String get hidePlaybackControls => 'Ocultar controles de reproducción'; @override String seekBackwardButton({required Object seconds}) => 'Retroceder ${seconds} segundos'; @@ -726,6 +858,7 @@ class _Translations$messages$es extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Eliminado de Seguir Viendo'; @override String errorLoading({required Object error}) => 'Error: ${error}'; + @override String get searchPartialResults => 'Algunos servidores de medios no se pudieron buscar. Se muestran los resultados disponibles.'; @override String get streamInterrupted => 'La reproducción se interrumpió. Pulsa reproducir o avanza para volver a intentarlo.'; @override String get liveStreamInterrupted => 'La transmisión en vivo se interrumpió. Pulsa reproducir para volver a intentarlo.'; @override String get fileInfoNotAvailable => 'Información de archivo no disponible'; @@ -764,6 +897,8 @@ class _Translations$messages$es extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Cambiando a reproductor compatible...'; @override String get serverLimitTitle => 'Error de reproducción'; @override String get serverLimitBody => 'Error del servidor (HTTP 500). Un límite de ancho de banda/transcodificación probablemente rechazó esta sesión. Pide al propietario que lo ajuste.'; + @override String get mediaUnreadableTitle => 'Archivo no disponible'; + @override String get mediaUnreadableBody => 'El servidor encontró este elemento pero no pudo leer su archivo (HTTP 404). Es probable que el archivo se haya movido o eliminado, o que su almacenamiento esté sin conexión. Pide al propietario del servidor que revise el archivo y vuelva a escanear la biblioteca.'; @override String get logsUploaded => 'Registros subidos'; @override String get logsUploadFailed => 'Error al subir registros'; @override String get logId => 'ID de registro'; @@ -917,6 +1052,8 @@ class _Translations$connections$es extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sesión caducada para ${name}'; @override String sessionExpiredMany({required Object count}) => 'Sesión caducada para ${count} servidores'; @override String get signInAgain => 'Iniciar sesión de nuevo'; + @override String editMediaBrowserTitle({required Object product}) => 'Editar conexión de ${product}'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Añade o elimina URL para ${serverName}. Plezy usará la URL accesible con menor latencia.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$es extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Error en la búsqueda: ${error}'; + @override String get searchUnavailable => 'La búsqueda no pudo alcanzar ningún servidor de medios.'; @override String connectionTimeout({required Object context}) => 'Tiempo de conexión agotado al cargar ${context}'; @override String get connectionFailed => 'No se puede conectar al servidor multimedia'; @override String unableToLoad({required Object context}) => 'No se pudo cargar ${context}. Inténtalo de nuevo.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$es extends Translations$logs$en { @override String get uploadLogs => 'Subir registros'; } +// Path: startup +class _Translations$startup$es extends Translations$startup$en { + _Translations$startup$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy no pudo iniciarse'; + @override String get failedBody => 'Algo salió mal durante el inicio. Los detalles de abajo indican qué ha fallado.'; + @override String get failedBodyRepairable => 'El archivo de ajustes guardados de Plezy está dañado y debe reconstruirse antes de que Plezy pueda iniciarse. Reintentar no servirá: elige Reparar almacenamiento.'; + @override String get phaseLabel => 'Paso'; + @override String get showDetails => 'Mostrar detalles'; + @override String get hideDetails => 'Ocultar detalles'; + @override String get copyDetails => 'Copiar detalles'; + @override String get detailsCopied => 'Detalles copiados al portapapeles'; + @override String get uploadDetails => 'Subir detalles'; + @override String get repairStorage => 'Reparar almacenamiento'; + @override String get repairTitle => '¿Reparar los datos guardados?'; + @override String get repairBodyCommon => 'El archivo de ajustes de Plezy está dañado y no puede leerse. La reparación restablece todos los ajustes a sus valores predeterminados.'; + @override String get repairBodyOneCredential => 'Un inicio de sesión guardado está dañado y no puede leerse. La reparación elimina solo ese; el resto de tus ajustes se mantienen intactos.'; + @override String get repairBodySignInsKept => 'Tus servidores y perfiles deberían permanecer con la sesión iniciada.'; + @override String get repairBodySignInsLost => 'La clave que protege tus inicios de sesión guardados no se puede recuperar de este archivo, por lo que tendrás que iniciar sesión de nuevo en cada servidor y perfil. Nada en tu servidor de medios se ve afectado.'; + @override String get repairBodySessionsUncertain => 'Los rastreadores (MAL, AniList, Simkl, Trakt) y Seerr se guardan por separado y pueden sobrevivir o no. Plezy te dirá exactamente qué ha conservado.'; + @override String get repairConfirm => 'Reparar'; + @override String get repairSucceeded => 'Almacenamiento reparado'; + @override String get repairNeedsRestart => 'Almacenamiento reparado: es necesario reiniciar'; + @override String get restartRequiredBody => 'Tus datos se repararon, pero Plezy debe iniciarse de nuevo antes de poder usarlos. Cierra Plezy y ábrelo otra vez.'; + @override String get quitPlezy => 'Salir de Plezy'; + @override String get repairFailed => 'Error en la reparación'; + @override String get repairKeptSignIns => 'Tus servidores y perfiles siguen con la sesión iniciada.'; + @override String get repairLostSignIns => 'La clave que protege tus inicios de sesión guardados no se pudo recuperar. Tendrás que iniciar sesión de nuevo en cada servidor y perfil.'; + @override String get repairLostSessions => 'Se perdió al menos una conexión de rastreador o de Seerr y hay que volver a conectarla.'; + @override String get backupTitle => 'Se ha guardado una copia del archivo dañado'; + @override String get backupWarning => 'Contiene tus credenciales de inicio de sesión. No la subas ni la compartas.'; + @override String get deleteBackup => 'Eliminar copia'; + @override String get backupDeleted => 'Copia eliminada.'; + @override String get previousFailureTitle => 'Plezy no se inició la última vez'; +} + // Path: licenses class _Translations$licenses$es extends Translations$licenses$en { _Translations$licenses$es._(TranslationsEs root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$es extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Sin resultados para "${query}"'; @override String searchPrompt({required Object source}) => 'Busca películas y series en ${source}.'; @override String get searchFailed => 'La búsqueda falló. Comprueba tu conexión e inténtalo de nuevo.'; + @override late final _Translations$explore$badge$es badge = _Translations$explore$badge$es._(_root); + @override late final _Translations$explore$stats$es stats = _Translations$explore$stats$es._(_root); + @override late final _Translations$explore$season$es season = _Translations$explore$season$es._(_root); + @override late final _Translations$explore$format$es format = _Translations$explore$format$es._(_root); + @override late final _Translations$explore$sourceMaterial$es sourceMaterial = _Translations$explore$sourceMaterial$es._(_root); + @override late final _Translations$explore$creditRole$es creditRole = _Translations$explore$creditRole$es._(_root); + @override late final _Translations$explore$relation$es relation = _Translations$explore$relation$es._(_root); + @override String broadcast({required Object day, required Object time}) => 'Se emite los ${day} a las ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Se emite los ${day} a las ${time} ${timezone}'; + @override late final _Translations$explore$detail$es detail = _Translations$explore$detail$es._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: '${n} resultado', + other: '${n} resultados', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$es extends Translations$downloads$en { @override String get editSyncRule => 'Editar regla de sincronización'; @override String get removeSyncRule => 'Eliminar regla de sincronización'; @override String removeSyncRuleConfirm({required Object title}) => '¿Dejar de sincronizar "${title}"? Los episodios descargados se conservarán.'; + @override String removeListSyncRuleConfirm({required Object title}) => '¿Dejar de sincronizar "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Eliminar también las descargas asociadas'; + @override String get deleteSyncRuleDownloadsDescription => 'Se conservarán las descargas usadas por otra regla de sincronización o perfil.'; @override String syncRuleCreated({required Object count}) => 'Regla de sincronización creada — se conservarán ${count} episodios no vistos'; @override String get syncRuleUpdated => 'Regla de sincronización actualizada'; @override String get syncRuleRemoved => 'Regla de sincronización eliminada'; + @override String get syncRuleAndDownloadsRemoved => 'Regla de sincronización y descargas asociadas eliminadas'; + @override String get syncRuleCleanupBusy => 'Las reglas de sincronización se están actualizando. Inténtalo de nuevo en un momento.'; + @override String get syncRuleCleanupUnavailable => 'No se pudieron identificar las descargas asociadas de forma segura. Vuelve a conectar el servidor e inténtalo de nuevo, o elimina la regla sin borrar las descargas.'; @override String syncedNewEpisodes({required Object count, required Object title}) => '${count} nuevos episodios sincronizados para ${title}'; @override String get activeSyncRules => 'Reglas de sincronización'; @override String get noSyncRules => 'Sin reglas de sincronización'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$es extends Translations$addServer$en { final TranslationsEs _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Añadir servidor ${product}'; @override String get serverUrls => 'Direcciones URL del servidor'; @override String get serverUrlsHelper => 'Se permiten varias URL, separadas por comas.'; @override String get findServer => 'Buscar servidor'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Buscando servidores ${product} locales...'; + @override String localMediaBrowserServers({required Object product}) => 'Servidores ${product} locales'; @override String get username => 'Usuario'; @override String get password => 'Contraseña'; @override String get signIn => 'Iniciar sesión'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$es extends Translations$addServer$en { @override String get addPlexTitle => 'Iniciar sesión con Plex'; @override String get pinExpired => 'El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.'; @override String failedToRegisterAccount({required Object error}) => 'No se pudo registrar la cuenta: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Introduce la URL de tu servidor ${product}'; @override String get addConnectionTitle => 'Añadir conexión'; @override String addConnectionTitleScoped({required Object name}) => 'Añadir a ${name}'; @override String get signInWithPlexCard => 'Iniciar sesión con Plex'; @override String get signInWithPlexCardSubtitle => 'Autoriza este dispositivo. Se añaden servidores compartidos.'; @override String get signInWithPlexCardSubtitleScoped => 'Autoriza una cuenta Plex. Los usuarios de Home se convierten en perfiles.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Conectar a ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Introduce la URL de tu servidor, el nombre de usuario y la contraseña.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Inicia sesión en tu servidor ${product}. Se vincula a ${name}.'; @override String get borrowFromAnotherProfile => 'Tomar prestado de otro perfil'; @override String get borrowFromAnotherProfileSubtitle => 'Reutiliza la conexión de otro perfil. Los perfiles protegidos con PIN requieren un PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$es extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get critic => 'Críticos'; + @override String get audience => 'Público'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Críticos de Rotten Tomatoes'; + @override String get rottenTomatoesAudience => 'Público de Rotten Tomatoes'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$es extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$es._(TranslationsEs root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$es extends Translations$explore$status$en { @override String get upcoming => 'Próximamente'; } +// Path: explore.badge +class _Translations$explore$badge$es extends Translations$explore$badge$en { + _Translations$explore$badge$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} popular'; + @override String rankAiring({required Object n}) => '#${n} en emisión'; + @override String rankRated({required Object n}) => '#${n} puntuado'; + @override String rankFavorited({required Object n}) => '#${n} favorito'; + @override String rankTrending({required Object n}) => '#${n} en tendencia'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} en ${season}'; + @override String watchingNow({required Object n}) => '${n} viendo'; + @override String get available => 'Disponible'; + @override String get partiallyAvailable => 'Parcialmente disponible'; + @override String get availableIn4k => 'Disponible en 4K'; + @override String get requested => 'Solicitado'; + @override String get pendingApproval => 'Pendiente de aprobación'; + @override String get processing => 'Procesando'; + @override String get declined => 'Rechazado'; + @override String get requestFailed => 'La solicitud falló'; + @override String get requested4k => 'Solicitado en 4K'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} temporadas'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Ep. ${episode} en ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Siguiente en ${duration}'; + @override String episodesShort({required Object n}) => '${n} eps'; + @override String minutesPerEpisode({required Object n}) => '${n} min/ep'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$es extends Translations$explore$stats$en { + _Translations$explore$stats$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} registrados'; + @override String viewersDay({required Object n}) => '${n} vistos hoy'; + @override String viewersWeek({required Object n}) => '${n} vistos esta semana'; + @override String viewersMonth({required Object n}) => '${n} vistos este mes'; + @override String viewersYear({required Object n}) => '${n} vistos este año'; + @override String viewersAllTime({required Object n}) => '${n} espectadores'; + @override String planning({required Object n}) => '${n} tienen previsto verlo'; + @override String favorited({required Object n}) => '${n} favoritos'; + @override String dropRate({required Object percent}) => '${percent} lo abandonaron'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: '${n} comentario', + other: '${n} comentarios', + ); + @override String votes({required Object n}) => '${n} votos'; + @override String watching({required Object n}) => '${n} lo están viendo'; + @override String completed({required Object n}) => '${n} lo completaron'; + @override String onHold({required Object n}) => '${n} en pausa'; + @override String dropped({required Object n}) => '${n} lo abandonaron'; +} + +// Path: explore.season +class _Translations$explore$season$es extends Translations$explore$season$en { + _Translations$explore$season$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get winter => 'Invierno'; + @override String get spring => 'Primavera'; + @override String get summer => 'Verano'; + @override String get fall => 'Otoño'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$es extends Translations$explore$format$en { + _Translations$explore$format$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'Corto de TV'; + @override String get movie => 'Película'; + @override String get special => 'Especial'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Música'; + @override String get other => 'Otro'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$es extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get original => 'Original'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Novela ligera'; + @override String get novel => 'Novela'; + @override String get visualNovel => 'Novela visual'; + @override String get game => 'Juego'; + @override String get webComic => 'Cómic web'; + @override String get musicRelease => 'Música'; + @override String get otherMedia => 'Otro'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$es extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get director => 'Director'; + @override String get writer => 'Guionista'; + @override String get producer => 'Productor'; + @override String get creator => 'Creador'; + @override String get composer => 'Compositor'; +} + +// Path: explore.relation +class _Translations$explore$relation$es extends Translations$explore$relation$en { + _Translations$explore$relation$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Precuela'; + @override String get sequel => 'Secuela'; + @override String get sideStory => 'Historia paralela'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Versión alternativa'; + @override String get summary => 'Resumen'; + @override String get parentStory => 'Historia principal'; + @override String get adaptation => 'Adaptación'; + @override String get other => 'Relacionado'; +} + +// Path: explore.detail +class _Translations$explore$detail$es extends Translations$explore$detail$en { + _Translations$explore$detail$es._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Título original'; + @override String get alsoKnownAs => 'También conocido como'; + @override String get studios => 'Estudios'; + @override String get country => 'País'; + @override String get language => 'Idioma'; + @override String get released => 'Estrenada'; + @override String get physicalRelease => 'En disco'; + @override String get ended => 'Finalizada'; + @override String addedOn({required Object date}) => 'Añadida el ${date}'; + @override String get yourRating => 'Tu valoración'; + @override String get budget => 'Presupuesto'; + @override String get revenue => 'Taquilla'; + @override String get contentAdvisory => 'Orientación por edades'; + @override String get tags => 'Etiquetas'; + @override String get revealSpoilerTags => 'Mostrar etiquetas de spoilers'; + @override String get links => 'Enlaces'; + @override String get watchOn => 'Ver en'; + @override String get watchTrailer => 'Ver tráiler'; + @override String openOn({required Object site}) => 'Abrir en ${site}'; + @override String get crew => 'Equipo'; + @override String get ratings => 'Valoraciones'; + @override String get schedule => 'Programación'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: 'Recomendada por ${n} usuario', + other: 'Recomendada por ${n} usuarios', + ); + @override String recommendedBy({required Object who}) => 'Recomendada por ${who}'; + @override String favoritedBy({required Object who}) => 'Marcada como favorita por ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} sin estrenar'; + @override String recommendedByPercent({required Object percent}) => 'Recomendada por el ${percent} de los espectadores'; + @override String get relatedTitles => 'Títulos relacionados'; + @override String get background => 'Antecedentes'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$es extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$es._(TranslationsEs root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$es extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsEs { 'auth.waitingForAuth' => 'Esperando autenticación...\nInicia sesión desde tu navegador.', 'auth.useBrowser' => 'Usar navegador', 'auth.or' => 'o', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Conectar a ${product}', 'auth.useQuickConnect' => 'Usar Quick Connect', 'auth.quickConnectInstructions' => 'Abre Quick Connect en Jellyfin e introduce este código.', 'auth.quickConnectWaiting' => 'Esperando aprobación…', @@ -2248,6 +2654,17 @@ extension on TranslationsEs { 'common.fullscreen' => 'Pantalla completa', 'common.exitFullscreen' => 'Salir de pantalla completa', 'common.pressBackAgainToExit' => 'Pulsa Atrás de nuevo para salir', + 'common.ratingSource.critic' => 'Críticos', + 'common.ratingSource.audience' => 'Público', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Críticos de Rotten Tomatoes', + 'common.ratingSource.rottenTomatoesAudience' => 'Público de Rotten Tomatoes', 'screens.licenses' => 'Licencias', 'screens.switchProfile' => 'Cambiar perfil', 'screens.subtitleStyling' => 'Estilo de subtítulos', @@ -2284,6 +2701,7 @@ extension on TranslationsEs { 'settings.darkTheme' => 'Oscuro', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Densidad de la biblioteca', + 'settings.displayScale' => 'Escala de visualización', 'settings.compact' => 'Compacto', 'settings.comfortable' => 'Cómodo', 'settings.tvCornerSpotlightBackdrop' => 'Imagen destacada en la esquina', @@ -2333,6 +2751,11 @@ extension on TranslationsEs { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => 'Automático (recomendado)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} MB de memoria disponible. Un búfer de ${size} MB puede afectar a la reproducción.', + 'settings.playbackBuffer' => 'Búfer de reproducción', + 'settings.playbackBufferAuto' => 'Automático (recomendado)', + 'settings.playbackBufferLarge' => 'Grande', + 'settings.playbackBufferExtraLarge' => 'Extra grande', + 'settings.playbackBufferDescription' => 'Almacena más en búfer para conexiones inestables. También limitado por el tamaño del búfer.', 'settings.defaultQualityTitle' => 'Calidad predeterminada', 'settings.musicQualityTitle' => 'Calidad de música', 'settings.subtitleStyling' => 'Estilo de subtítulos', @@ -2366,6 +2789,9 @@ extension on TranslationsEs { 'settings.debugLoggingDescription' => 'Habilitar registros detallados para solucionar problemas', 'settings.viewLogs' => 'Ver registros', 'settings.viewLogsDescription' => 'Ver los registros de la aplicación', + 'settings.clearImageCache' => 'Vaciar caché de imágenes', + 'settings.clearImageCacheDescription' => 'Borra las carátulas y miniaturas guardadas en caché. Las imágenes pueden tardar más en cargar hasta que se descarguen de nuevo.', + 'settings.clearImageCacheSuccess' => 'Caché de imágenes vaciada correctamente', 'settings.resetSettings' => 'Restablecer configuración', 'settings.resetSettingsDescription' => 'Restaurar ajustes predeterminados. No se puede deshacer.', 'settings.resetSettingsSuccess' => 'Configuración restablecida con éxito', @@ -2549,29 +2975,118 @@ extension on TranslationsEs { 'hotkeys.actions.skipMarker' => 'Saltar introducción/créditos', 'hotkeys.actions.screenshot' => 'Tomar captura de pantalla', 'fileInfo.title' => 'Información del archivo', + 'fileInfo.overview' => 'Resumen', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Audio', 'fileInfo.subtitles' => 'Subtítulos', + 'fileInfo.images' => 'Imágenes incrustadas', + 'fileInfo.dataStreams' => 'Flujos de datos', + 'fileInfo.lyrics' => 'Letras', 'fileInfo.file' => 'Archivo', + 'fileInfo.attachments' => 'Archivos adjuntos', + 'fileInfo.delivery' => 'Entrega', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Versión ${index} de ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Archivo ${index} de ${count}', + 'fileInfo.noStreams' => 'El servidor no informó de ningún flujo para este archivo.', + 'fileInfo.copyPath' => 'Copiar ruta', + 'fileInfo.pathCopied' => 'Ruta del archivo copiada', 'fileInfo.codec' => 'Códec', + 'fileInfo.codecTag' => 'Etiqueta de códec', 'fileInfo.resolution' => 'Resolución', + 'fileInfo.codedResolution' => 'Resolución codificada', 'fileInfo.bitrate' => 'Tasa de bits', 'fileInfo.frameRate' => 'Frecuencia de fotogramas', + 'fileInfo.rotation' => 'Rotación', + 'fileInfo.comment' => 'Comentario', + 'fileInfo.audioDescription' => 'Audiodescripción', + 'fileInfo.headerCompression' => 'Compresión de cabecera', + 'fileInfo.sidecarFile' => 'Archivo auxiliar', + 'fileInfo.transportTimestamp' => 'Marca de tiempo de transporte', + 'fileInfo.displayOffset' => 'Desplazamiento de visualización', + 'fileInfo.previewFailureCode' => 'Código de error de vista previa', + 'fileInfo.previewRetries' => 'Reintentos de vista previa', 'fileInfo.aspectRatio' => 'Relación de aspecto', + 'fileInfo.pixelAspectRatio' => 'Relación de aspecto de píxel', 'fileInfo.profile' => 'Perfil', + 'fileInfo.level' => 'Nivel', 'fileInfo.bitDepth' => 'Profundidad de bits', + 'fileInfo.pixelFormat' => 'Formato de píxel', 'fileInfo.colorSpace' => 'Espacio de color', 'fileInfo.colorRange' => 'Rango de color', 'fileInfo.colorPrimaries' => 'Primarias de color', + 'fileInfo.colorTransfer' => 'Transferencia de color', 'fileInfo.chromaSubsampling' => 'Submuestreo de croma', + 'fileInfo.chromaLocation' => 'Ubicación de crominancia', + 'fileInfo.scanType' => 'Tipo de escaneo', + 'fileInfo.interlaced' => 'Entrelazado', + 'fileInfo.anamorphic' => 'Anamórfico', + 'fileInfo.referenceFrames' => 'Fotogramas de referencia', + 'fileInfo.dynamicRange' => 'Rango dinámico', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Nivel de Dolby Vision', + 'fileInfo.dolbyVisionVersion' => 'Versión de Dolby Vision', + 'fileInfo.dolbyVisionLayers' => 'Capas de Dolby Vision', + 'fileInfo.baseLayerCompatibility' => 'Compatibilidad de capa base', + 'fileInfo.avcBitstream' => 'Flujo de bits AVC', + 'fileInfo.nalLengthSize' => 'Tamaño de longitud NAL', + 'fileInfo.scalingMatrix' => 'Matriz de escalado personalizada', + 'fileInfo.streamIdentifier' => 'Identificador de flujo', + 'fileInfo.streamIndex' => 'Índice de flujo', + 'fileInfo.streamId' => 'ID de flujo', + 'fileInfo.language' => 'Idioma', + 'fileInfo.languageCode' => 'Código de idioma', + 'fileInfo.streamTitle' => 'Título de la pista', 'fileInfo.channels' => 'Canales', + 'fileInfo.sampleRate' => 'Frecuencia de muestreo', + 'fileInfo.spatialAudio' => 'Audio espacial', + 'fileInfo.textBased' => 'Basado en texto', + 'fileInfo.subtitleFormat' => 'Formato de archivo auxiliar', + 'fileInfo.provider' => 'Proveedor', + 'fileInfo.matchScore' => 'Puntuación de coincidencia', + 'fileInfo.externalDelivery' => 'Puede servirse por separado', + 'fileInfo.sidecarPath' => 'Ruta del archivo auxiliar', + 'fileInfo.sourceStream' => 'Copiado de', + 'fileInfo.temporary' => 'Temporal', + 'fileInfo.timeBase' => 'Base de tiempo', 'fileInfo.overallBitrate' => 'Tasa de bits total', 'fileInfo.path' => 'Ruta', + 'fileInfo.fileName' => 'Nombre de archivo', 'fileInfo.size' => 'Tamaño', + 'fileInfo.totalSize' => 'Tamaño total', 'fileInfo.container' => 'Contenedor', 'fileInfo.duration' => 'Duración', + 'fileInfo.previewThumbnails' => 'Miniaturas de vista previa', + 'fileInfo.previewIndex' => 'Índice de vista previa', + 'fileInfo.packetLength' => 'Longitud del paquete', + 'fileInfo.filePresent' => 'Archivo presente', + 'fileInfo.fileReadable' => 'Legible por el servidor', + 'fileInfo.streamPath' => 'Ruta del flujo', 'fileInfo.optimizedForStreaming' => 'Optimizado para transmisión', 'fileInfo.has64bitOffsets' => 'Desplazamientos de 64 bits', + 'fileInfo.protocol' => 'Protocolo', + 'fileInfo.mediaType' => 'Tipo de medio', + 'fileInfo.sourceKind' => 'Tipo de origen', + 'fileInfo.optimizedVersion' => 'Versión optimizada', + 'fileInfo.optimizationTarget' => 'Destino de optimización', + 'fileInfo.deletedAt' => 'Eliminado', + 'fileInfo.remoteSource' => 'Origen remoto', + 'fileInfo.infiniteStream' => 'Flujo infinito', + 'fileInfo.directPlay' => 'Reproducción directa', + 'fileInfo.directStream' => 'Flujo directo', + 'fileInfo.transcoding' => 'Transcodificación', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'ID de versión', + 'fileInfo.fileId' => 'ID de archivo', + 'fileInfo.defaultAudioTrack' => 'Pista de audio predeterminada', + 'fileInfo.defaultSubtitleTrack' => 'Pista de subtítulos predeterminada', + 'fileInfo.subtitlesOff' => 'Desactivados', + 'fileInfo.flagDefault' => 'Predeterminada', + 'fileInfo.flagForced' => 'Forzada', + 'fileInfo.flagSelected' => 'Seleccionada', + 'fileInfo.flagExternal' => 'Externa', + 'fileInfo.flagHearingImpaired' => 'Para personas con discapacidad auditiva', + 'fileInfo.flagDub' => 'Doblaje', + 'fileInfo.flagOriginal' => 'Original', 'mediaMenu.markAsWatched' => 'Marcar como visto', 'mediaMenu.markAsUnwatched' => 'Marcar como no visto', 'mediaMenu.removeFromContinueWatching' => 'Eliminar de Seguir viendo', @@ -2580,7 +3095,28 @@ extension on TranslationsEs { 'mediaMenu.shufflePlay' => 'Reproducción aleatoria', 'mediaMenu.shuffleNotAvailableOffline' => 'La reproducción aleatoria no está disponible sin conexión', 'mediaMenu.fileInfo' => 'Información del archivo', + 'mediaMenu.deleteEpisodeFromServer' => 'Eliminar el episodio del servidor', + 'mediaMenu.deleteSeasonFromServer' => 'Eliminar la temporada del servidor', + 'mediaMenu.deleteShowFromServer' => 'Eliminar la serie del servidor', + 'mediaMenu.deleteMovieFromServer' => 'Eliminar la película del servidor', + 'mediaMenu.deleteEpisodeTitle' => '¿Eliminar este episodio?', + 'mediaMenu.deleteSeasonTitle' => '¿Eliminar esta temporada?', + 'mediaMenu.deleteShowTitle' => '¿Eliminar esta serie?', + 'mediaMenu.deleteMovieTitle' => '¿Eliminar esta película?', + 'mediaMenu.deleteEpisodeConfirm' => 'Eliminar episodio', + 'mediaMenu.deleteSeasonConfirm' => 'Eliminar temporada', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Eliminar serie', + 'mediaMenu.deleteMovieConfirm' => 'Eliminar película', + 'mediaMenu.deleteAnyway' => 'Eliminar de todos modos', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '¿Eliminar definitivamente ${title} de tu servidor?', 'mediaMenu.deleteMultipleWarning' => 'Esto incluye todos los episodios y sus archivos.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: 'Esto elimina el único episodio que contiene y su archivo.', other: 'Esto elimina los ${n} episodios que contiene y sus archivos.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: 'Este elemento se almacena en ${n} archivo, que se eliminará.', other: 'Este elemento se almacena en ${n} archivos, y todos se eliminarán.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: '${n} episodio más se almacena en el mismo archivo y también se eliminará:', other: '${n} episodios más se almacenan en el mismo archivo y también se eliminarán:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy no pudo comprobar qué archivos se eliminarán, por lo que podría borrar más de lo indicado arriba. Cancela y vuelve a intentarlo, o elimina de todos modos.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Tu servidor no proporcionó los detalles del archivo de este elemento, por lo que Plezy no puede comprobar qué archivos se eliminarán. Podría borrar más de lo indicado arriba.', 'mediaMenu.mediaDeletedSuccessfully' => 'Elemento multimedia eliminado con éxito', 'mediaMenu.mediaFailedToDelete' => 'Error al eliminar el elemento multimedia', 'mediaMenu.rate' => 'Calificar', @@ -2646,6 +3182,9 @@ extension on TranslationsEs { 'videoControls.playNext' => 'Reproducir siguiente', 'videoControls.playButton' => 'Reproducir', 'videoControls.pauseButton' => 'Pausar', + 'videoControls.playbackPaused' => 'En pausa', + 'videoControls.playbackResumed' => 'Reproduciendo', + 'videoControls.loadingVideo' => 'Cargando el vídeo', 'videoControls.showPlaybackControls' => 'Mostrar controles de reproducción', 'videoControls.hidePlaybackControls' => 'Ocultar controles de reproducción', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Retroceder ${seconds} segundos', @@ -2700,8 +3239,6 @@ extension on TranslationsEs { 'videoControls.subtitleDownloaded' => 'Subtítulo descargado', 'videoControls.subtitleDownloadedNotApplied' => 'El subtítulo se descargó, pero no se pudo seleccionar', 'videoControls.subtitleDownloadFailed' => 'Error al descargar subtítulo', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Buscar idiomas...', 'messages.markedAsWatched' => 'Marcado como visto', 'messages.markedAsUnwatched' => 'Marcado como no visto', @@ -2711,6 +3248,7 @@ extension on TranslationsEs { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: 'Se eliminó automáticamente ${n} descarga vista', other: 'Se eliminaron automáticamente ${n} descargas vistas', ), 'messages.removedFromContinueWatching' => 'Eliminado de Seguir Viendo', 'messages.errorLoading' => ({required Object error}) => 'Error: ${error}', + 'messages.searchPartialResults' => 'Algunos servidores de medios no se pudieron buscar. Se muestran los resultados disponibles.', 'messages.streamInterrupted' => 'La reproducción se interrumpió. Pulsa reproducir o avanza para volver a intentarlo.', 'messages.liveStreamInterrupted' => 'La transmisión en vivo se interrumpió. Pulsa reproducir para volver a intentarlo.', 'messages.fileInfoNotAvailable' => 'Información de archivo no disponible', @@ -2749,6 +3287,8 @@ extension on TranslationsEs { 'messages.switchingToCompatiblePlayer' => 'Cambiando a reproductor compatible...', 'messages.serverLimitTitle' => 'Error de reproducción', 'messages.serverLimitBody' => 'Error del servidor (HTTP 500). Un límite de ancho de banda/transcodificación probablemente rechazó esta sesión. Pide al propietario que lo ajuste.', + 'messages.mediaUnreadableTitle' => 'Archivo no disponible', + 'messages.mediaUnreadableBody' => 'El servidor encontró este elemento pero no pudo leer su archivo (HTTP 404). Es probable que el archivo se haya movido o eliminado, o que su almacenamiento esté sin conexión. Pide al propietario del servidor que revise el archivo y vuelva a escanear la biblioteca.', 'messages.logsUploaded' => 'Registros subidos', 'messages.logsUploadFailed' => 'Error al subir registros', 'messages.logId' => 'ID de registro', @@ -2857,6 +3397,8 @@ extension on TranslationsEs { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sesión caducada para ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sesión caducada para ${count} servidores', 'connections.signInAgain' => 'Iniciar sesión de nuevo', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Editar conexión de ${product}', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Añade o elimina URL para ${serverName}. Plezy usará la URL accesible con menor latencia.', 'discover.title' => 'Descubrir', 'discover.noContentAvailable' => 'No hay contenido disponible', 'discover.addMediaToLibraries' => 'Añade contenido a tus bibliotecas', @@ -2882,6 +3424,7 @@ extension on TranslationsEs { 'discover.minutesLeft' => ({required Object minutes}) => 'quedan ${minutes} min', 'discover.moreLikeThis' => 'Más contenido similar', 'errors.searchFailed' => ({required Object error}) => 'Error en la búsqueda: ${error}', + 'errors.searchUnavailable' => 'La búsqueda no pudo alcanzar ningún servidor de medios.', 'errors.connectionTimeout' => ({required Object context}) => 'Tiempo de conexión agotado al cargar ${context}', 'errors.connectionFailed' => 'No se puede conectar al servidor multimedia', 'errors.unableToLoad' => ({required Object context}) => 'No se pudo cargar ${context}. Inténtalo de nuevo.', @@ -2989,6 +3532,36 @@ extension on TranslationsEs { 'logs.clearLogs' => 'Borrar registros', 'logs.copyLogs' => 'Copiar registros', 'logs.uploadLogs' => 'Subir registros', + 'startup.failedTitle' => 'Plezy no pudo iniciarse', + 'startup.failedBody' => 'Algo salió mal durante el inicio. Los detalles de abajo indican qué ha fallado.', + 'startup.failedBodyRepairable' => 'El archivo de ajustes guardados de Plezy está dañado y debe reconstruirse antes de que Plezy pueda iniciarse. Reintentar no servirá: elige Reparar almacenamiento.', + 'startup.phaseLabel' => 'Paso', + 'startup.showDetails' => 'Mostrar detalles', + 'startup.hideDetails' => 'Ocultar detalles', + 'startup.copyDetails' => 'Copiar detalles', + 'startup.detailsCopied' => 'Detalles copiados al portapapeles', + 'startup.uploadDetails' => 'Subir detalles', + 'startup.repairStorage' => 'Reparar almacenamiento', + 'startup.repairTitle' => '¿Reparar los datos guardados?', + 'startup.repairBodyCommon' => 'El archivo de ajustes de Plezy está dañado y no puede leerse. La reparación restablece todos los ajustes a sus valores predeterminados.', + 'startup.repairBodyOneCredential' => 'Un inicio de sesión guardado está dañado y no puede leerse. La reparación elimina solo ese; el resto de tus ajustes se mantienen intactos.', + 'startup.repairBodySignInsKept' => 'Tus servidores y perfiles deberían permanecer con la sesión iniciada.', + 'startup.repairBodySignInsLost' => 'La clave que protege tus inicios de sesión guardados no se puede recuperar de este archivo, por lo que tendrás que iniciar sesión de nuevo en cada servidor y perfil. Nada en tu servidor de medios se ve afectado.', + 'startup.repairBodySessionsUncertain' => 'Los rastreadores (MAL, AniList, Simkl, Trakt) y Seerr se guardan por separado y pueden sobrevivir o no. Plezy te dirá exactamente qué ha conservado.', + 'startup.repairConfirm' => 'Reparar', + 'startup.repairSucceeded' => 'Almacenamiento reparado', + 'startup.repairNeedsRestart' => 'Almacenamiento reparado: es necesario reiniciar', + 'startup.restartRequiredBody' => 'Tus datos se repararon, pero Plezy debe iniciarse de nuevo antes de poder usarlos. Cierra Plezy y ábrelo otra vez.', + 'startup.quitPlezy' => 'Salir de Plezy', + 'startup.repairFailed' => 'Error en la reparación', + 'startup.repairKeptSignIns' => 'Tus servidores y perfiles siguen con la sesión iniciada.', + 'startup.repairLostSignIns' => 'La clave que protege tus inicios de sesión guardados no se pudo recuperar. Tendrás que iniciar sesión de nuevo en cada servidor y perfil.', + 'startup.repairLostSessions' => 'Se perdió al menos una conexión de rastreador o de Seerr y hay que volver a conectarla.', + 'startup.backupTitle' => 'Se ha guardado una copia del archivo dañado', + 'startup.backupWarning' => 'Contiene tus credenciales de inicio de sesión. No la subas ni la compartas.', + 'startup.deleteBackup' => 'Eliminar copia', + 'startup.backupDeleted' => 'Copia eliminada.', + 'startup.previousFailureTitle' => 'Plezy no se inició la última vez', 'licenses.relatedPackages' => 'Paquetes relacionados', 'licenses.license' => 'Licencia', 'licenses.licenseNumber' => ({required Object number}) => 'Licencia ${number}', @@ -3032,6 +3605,113 @@ extension on TranslationsEs { 'explore.searchEmpty' => ({required Object query}) => 'Sin resultados para "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Busca películas y series en ${source}.', 'explore.searchFailed' => 'La búsqueda falló. Comprueba tu conexión e inténtalo de nuevo.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} popular', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} en emisión', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} puntuado', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favorito', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} en tendencia', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} en ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} viendo', + 'explore.badge.available' => 'Disponible', + 'explore.badge.partiallyAvailable' => 'Parcialmente disponible', + 'explore.badge.availableIn4k' => 'Disponible en 4K', + 'explore.badge.requested' => 'Solicitado', + 'explore.badge.pendingApproval' => 'Pendiente de aprobación', + 'explore.badge.processing' => 'Procesando', + 'explore.badge.declined' => 'Rechazado', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'La solicitud falló', + 'explore.badge.requested4k' => 'Solicitado en 4K', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} temporadas', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Ep. ${episode} en ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Siguiente en ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} eps', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/ep', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} registrados', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} vistos hoy', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} vistos esta semana', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} vistos este mes', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} vistos este año', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} espectadores', + 'explore.stats.planning' => ({required Object n}) => '${n} tienen previsto verlo', + 'explore.stats.favorited' => ({required Object n}) => '${n} favoritos', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} lo abandonaron', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: '${n} comentario', other: '${n} comentarios', ), + 'explore.stats.votes' => ({required Object n}) => '${n} votos', + 'explore.stats.watching' => ({required Object n}) => '${n} lo están viendo', + 'explore.stats.completed' => ({required Object n}) => '${n} lo completaron', + 'explore.stats.onHold' => ({required Object n}) => '${n} en pausa', + 'explore.stats.dropped' => ({required Object n}) => '${n} lo abandonaron', + 'explore.season.winter' => 'Invierno', + 'explore.season.spring' => 'Primavera', + 'explore.season.summer' => 'Verano', + 'explore.season.fall' => 'Otoño', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'Corto de TV', + 'explore.format.movie' => 'Película', + 'explore.format.special' => 'Especial', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Música', + 'explore.format.other' => 'Otro', + 'explore.sourceMaterial.original' => 'Original', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Novela ligera', + 'explore.sourceMaterial.novel' => 'Novela', + 'explore.sourceMaterial.visualNovel' => 'Novela visual', + 'explore.sourceMaterial.game' => 'Juego', + 'explore.sourceMaterial.webComic' => 'Cómic web', + 'explore.sourceMaterial.musicRelease' => 'Música', + 'explore.sourceMaterial.otherMedia' => 'Otro', + 'explore.creditRole.director' => 'Director', + 'explore.creditRole.writer' => 'Guionista', + 'explore.creditRole.producer' => 'Productor', + 'explore.creditRole.creator' => 'Creador', + 'explore.creditRole.composer' => 'Compositor', + 'explore.relation.prequel' => 'Precuela', + 'explore.relation.sequel' => 'Secuela', + 'explore.relation.sideStory' => 'Historia paralela', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Versión alternativa', + 'explore.relation.summary' => 'Resumen', + 'explore.relation.parentStory' => 'Historia principal', + 'explore.relation.adaptation' => 'Adaptación', + 'explore.relation.other' => 'Relacionado', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Se emite los ${day} a las ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Se emite los ${day} a las ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Título original', + 'explore.detail.alsoKnownAs' => 'También conocido como', + 'explore.detail.studios' => 'Estudios', + 'explore.detail.country' => 'País', + 'explore.detail.language' => 'Idioma', + 'explore.detail.released' => 'Estrenada', + 'explore.detail.physicalRelease' => 'En disco', + 'explore.detail.ended' => 'Finalizada', + 'explore.detail.addedOn' => ({required Object date}) => 'Añadida el ${date}', + 'explore.detail.yourRating' => 'Tu valoración', + 'explore.detail.budget' => 'Presupuesto', + 'explore.detail.revenue' => 'Taquilla', + 'explore.detail.contentAdvisory' => 'Orientación por edades', + 'explore.detail.tags' => 'Etiquetas', + 'explore.detail.revealSpoilerTags' => 'Mostrar etiquetas de spoilers', + 'explore.detail.links' => 'Enlaces', + 'explore.detail.watchOn' => 'Ver en', + 'explore.detail.watchTrailer' => 'Ver tráiler', + 'explore.detail.openOn' => ({required Object site}) => 'Abrir en ${site}', + 'explore.detail.crew' => 'Equipo', + 'explore.detail.ratings' => 'Valoraciones', + 'explore.detail.schedule' => 'Programación', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: 'Recomendada por ${n} usuario', other: 'Recomendada por ${n} usuarios', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Recomendada por ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Marcada como favorita por ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} sin estrenar', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Recomendada por el ${percent} de los espectadores', + 'explore.detail.relatedTitles' => 'Títulos relacionados', + 'explore.detail.background' => 'Antecedentes', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: '${n} resultado', other: '${n} resultados', ), 'liveTv.title' => 'TV en vivo', 'liveTv.guide' => 'Guía', 'liveTv.noChannels' => 'No hay canales disponibles', @@ -3214,8 +3894,6 @@ extension on TranslationsEs { 'watchTogether.relayUnreachable' => 'No se puede acceder al servidor de retransmisión. Es posible que tu proveedor de internet esté bloqueando Ver juntos.', 'watchTogether.reconnectingToHost' => 'Reconectando con el anfitrión...', 'watchTogether.currentPlayback' => 'Reproducción actual', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Unirse a la reproducción actual', 'watchTogether.joinCurrentPlaybackDescription' => 'Vuelve a lo que el anfitrión está viendo ahora mismo', 'watchTogether.failedToOpenCurrentPlayback' => 'No se pudo abrir la reproducción actual', @@ -3284,9 +3962,15 @@ extension on TranslationsEs { 'downloads.editSyncRule' => 'Editar regla de sincronización', 'downloads.removeSyncRule' => 'Eliminar regla de sincronización', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => '¿Dejar de sincronizar "${title}"? Los episodios descargados se conservarán.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => '¿Dejar de sincronizar "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Eliminar también las descargas asociadas', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Se conservarán las descargas usadas por otra regla de sincronización o perfil.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Regla de sincronización creada — se conservarán ${count} episodios no vistos', 'downloads.syncRuleUpdated' => 'Regla de sincronización actualizada', 'downloads.syncRuleRemoved' => 'Regla de sincronización eliminada', + 'downloads.syncRuleAndDownloadsRemoved' => 'Regla de sincronización y descargas asociadas eliminadas', + 'downloads.syncRuleCleanupBusy' => 'Las reglas de sincronización se están actualizando. Inténtalo de nuevo en un momento.', + 'downloads.syncRuleCleanupUnavailable' => 'No se pudieron identificar las descargas asociadas de forma segura. Vuelve a conectar el servidor e inténtalo de nuevo, o elimina la regla sin borrar las descargas.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} nuevos episodios sincronizados para ${title}', 'downloads.activeSyncRules' => 'Reglas de sincronización', 'downloads.noSyncRules' => 'Sin reglas de sincronización', @@ -3449,6 +4133,8 @@ extension on TranslationsEs { 'performanceOverlay.dvRpus' => 'DV RPUs', 'performanceOverlay.dvRpuAverage' => 'Prom. DV RPU', 'performanceOverlay.dvSampleAverage' => 'Prom. muestra DV', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Luma máx.', 'performanceOverlay.minLuma' => 'Luma mín.', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsEs { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Activar Plezy en ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Visita ${url} e introduce este código:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Abrir ${service} para activar', @@ -3641,9 +4328,12 @@ extension on TranslationsEs { 'services.libraryFilter.modeHintWhitelist' => 'Sincronizar solo las bibliotecas seleccionadas abajo.', 'services.libraryFilter.libraries' => 'Bibliotecas', 'services.libraryFilter.noLibraries' => 'No hay bibliotecas disponibles', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Añadir servidor ${product}', 'addServer.serverUrls' => 'Direcciones URL del servidor', 'addServer.serverUrlsHelper' => 'Se permiten varias URL, separadas por comas.', 'addServer.findServer' => 'Buscar servidor', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Buscando servidores ${product} locales...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Servidores ${product} locales', 'addServer.username' => 'Usuario', 'addServer.password' => 'Contraseña', 'addServer.signIn' => 'Iniciar sesión', @@ -3655,11 +4345,15 @@ extension on TranslationsEs { 'addServer.addPlexTitle' => 'Iniciar sesión con Plex', 'addServer.pinExpired' => 'El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'No se pudo registrar la cuenta: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Introduce la URL de tu servidor ${product}', 'addServer.addConnectionTitle' => 'Añadir conexión', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Añadir a ${name}', 'addServer.signInWithPlexCard' => 'Iniciar sesión con Plex', 'addServer.signInWithPlexCardSubtitle' => 'Autoriza este dispositivo. Se añaden servidores compartidos.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Autoriza una cuenta Plex. Los usuarios de Home se convierten en perfiles.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Conectar a ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Introduce la URL de tu servidor, el nombre de usuario y la contraseña.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Inicia sesión en tu servidor ${product}. Se vincula a ${name}.', 'addServer.borrowFromAnotherProfile' => 'Tomar prestado de otro perfil', 'addServer.borrowFromAnotherProfileSubtitle' => 'Reutiliza la conexión de otro perfil. Los perfiles protegidos con PIN requieren un PIN.', _ => null, diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 8e028c76..9589153f 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -67,6 +67,7 @@ class TranslationsFr extends Translations with BaseTranslations 'En attente d\'authentification...\nConnectez-vous depuis votre navigateur.'; @override String get useBrowser => 'Utiliser le navigateur'; @override String get or => 'ou'; + @override String connectToMediaBrowser({required Object product}) => 'Se connecter à ${product}'; @override String get useQuickConnect => 'Utiliser Quick Connect'; @override String get quickConnectInstructions => 'Ouvrez Quick Connect dans Jellyfin et saisissez ce code.'; @override String get quickConnectWaiting => 'En attente d\'approbation…'; @@ -155,7 +157,7 @@ class _Translations$common$fr extends Translations$common$en { @override String get pause => 'Pause'; @override String get resume => 'Reprendre'; @override String get error => 'Erreur'; - @override String get search => 'Rechercher'; + @override String get search => 'Recherche'; @override String get home => 'Accueil'; @override String get back => 'Retour'; @override String get settings => 'Paramètres'; @@ -175,6 +177,7 @@ class _Translations$common$fr extends Translations$common$en { @override String get fullscreen => 'Plein écran'; @override String get exitFullscreen => 'Quitter le plein écran'; @override String get pressBackAgainToExit => 'Appuyez à nouveau sur retour pour quitter'; + @override late final _Translations$common$ratingSource$fr ratingSource = _Translations$common$ratingSource$fr._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$fr extends Translations$settings$en { @override String get darkTheme => 'Sombre'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Densité des bibliothèques'; + @override String get displayScale => 'Échelle d\'affichage'; @override String get compact => 'Compact'; @override String get comfortable => 'Confortable'; @override String get tvCornerSpotlightBackdrop => 'Illustration en vedette dans le coin'; @@ -287,6 +291,11 @@ class _Translations$settings$fr extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} Mo'; @override String get bufferSizeAuto => 'Automatique (recommandé)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} Mo de mémoire disponible. Un tampon de ${size} Mo peut affecter la lecture.'; + @override String get playbackBuffer => 'Tampon de lecture'; + @override String get playbackBufferAuto => 'Auto (recommandé)'; + @override String get playbackBufferLarge => 'Grand'; + @override String get playbackBufferExtraLarge => 'Très grand'; + @override String get playbackBufferDescription => 'Tampon supplémentaire contre les connexions instables. Également limité par la taille du tampon.'; @override String get defaultQualityTitle => 'Qualité par défaut'; @override String get musicQualityTitle => 'Qualité de la musique'; @override String get subtitleStyling => 'Style des sous-titres'; @@ -320,6 +329,9 @@ class _Translations$settings$fr extends Translations$settings$en { @override String get debugLoggingDescription => 'Activer la journalisation détaillée pour le dépannage'; @override String get viewLogs => 'Voir les journaux'; @override String get viewLogsDescription => 'Voir les journaux de l’application'; + @override String get clearImageCache => 'Vider le cache d\'images'; + @override String get clearImageCacheDescription => 'Vide les affiches et vignettes en cache. Les images peuvent se charger plus lentement jusqu\'à leur prochain téléchargement.'; + @override String get clearImageCacheSuccess => 'Cache d\'images vidé avec succès'; @override String get resetSettings => 'Réinitialiser les paramètres'; @override String get resetSettingsDescription => 'Restaurer les paramètres par défaut. Action irréversible.'; @override String get resetSettingsSuccess => 'Réinitialisation des paramètres réussie'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$fr extends Translations$fileInfo$en { // Translations @override String get title => 'Informations sur le fichier'; + @override String get overview => 'Aperçu'; @override String get video => 'Vidéo'; @override String get audio => 'Audio'; @override String get subtitles => 'Sous-titres'; + @override String get images => 'Images intégrées'; + @override String get dataStreams => 'Flux de données'; + @override String get lyrics => 'Paroles'; @override String get file => 'Fichier'; + @override String get attachments => 'Pièces jointes'; + @override String get delivery => 'Diffusion'; + @override String versionCounter({required Object index, required Object count}) => 'Version ${index} sur ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Fichier ${index} sur ${count}'; + @override String get noStreams => 'Le serveur n\'a signalé aucun flux pour ce fichier.'; + @override String get copyPath => 'Copier le chemin'; + @override String get pathCopied => 'Chemin du fichier copié'; @override String get codec => 'Codec'; + @override String get codecTag => 'Balise de codec'; @override String get resolution => 'Résolution'; + @override String get codedResolution => 'Résolution codée'; @override String get bitrate => 'Débit'; @override String get frameRate => 'Fréquence d\'images'; + @override String get rotation => 'Rotation'; + @override String get comment => 'Commentaire'; + @override String get audioDescription => 'Audiodescription'; + @override String get headerCompression => 'Compression d\'en-tête'; + @override String get sidecarFile => 'Fichier annexe'; + @override String get transportTimestamp => 'Horodatage du transport'; + @override String get displayOffset => 'Décalage d\'affichage'; + @override String get previewFailureCode => 'Code d\'échec de l\'aperçu'; + @override String get previewRetries => 'Tentatives d\'aperçu'; @override String get aspectRatio => 'Format d\'image'; + @override String get pixelAspectRatio => 'Rapport d\'aspect des pixels'; @override String get profile => 'Profil'; + @override String get level => 'Niveau'; @override String get bitDepth => 'Profondeur de bits'; + @override String get pixelFormat => 'Format de pixels'; @override String get colorSpace => 'Espace colorimétrique'; @override String get colorRange => 'Gamme de couleurs'; @override String get colorPrimaries => 'Couleurs primaires'; + @override String get colorTransfer => 'Transfert de couleur'; @override String get chromaSubsampling => 'Sous-échantillonnage chromatique'; + @override String get chromaLocation => 'Position du chroma'; + @override String get scanType => 'Type de balayage'; + @override String get interlaced => 'Entrelacé'; + @override String get anamorphic => 'Anamorphique'; + @override String get referenceFrames => 'Images de référence'; + @override String get dynamicRange => 'Plage dynamique'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Niveau Dolby Vision'; + @override String get dolbyVisionVersion => 'Version Dolby Vision'; + @override String get dolbyVisionLayers => 'Couches Dolby Vision'; + @override String get baseLayerCompatibility => 'Compatibilité de la couche de base'; + @override String get avcBitstream => 'Flux binaire AVC'; + @override String get nalLengthSize => 'Taille de longueur NAL'; + @override String get scalingMatrix => 'Matrice de mise à l\'échelle personnalisée'; + @override String get streamIdentifier => 'Identifiant de flux'; + @override String get streamIndex => 'Index de flux'; + @override String get streamId => 'ID de flux'; + @override String get language => 'Langue'; + @override String get languageCode => 'Code de langue'; + @override String get streamTitle => 'Titre de la piste'; @override String get channels => 'Canaux'; + @override String get sampleRate => 'Fréquence d\'échantillonnage'; + @override String get spatialAudio => 'Audio spatial'; + @override String get textBased => 'Basé sur du texte'; + @override String get subtitleFormat => 'Format annexe'; + @override String get provider => 'Fournisseur'; + @override String get matchScore => 'Score de correspondance'; + @override String get externalDelivery => 'Peut être diffusé séparément'; + @override String get sidecarPath => 'Chemin du fichier annexe'; + @override String get sourceStream => 'Copié depuis'; + @override String get temporary => 'Temporaire'; + @override String get timeBase => 'Base de temps'; @override String get overallBitrate => 'Débit global'; @override String get path => 'Chemin'; + @override String get fileName => 'Nom du fichier'; @override String get size => 'Taille'; + @override String get totalSize => 'Taille totale'; @override String get container => 'Conteneur'; @override String get duration => 'Durée'; + @override String get previewThumbnails => 'Vignettes d\'aperçu'; + @override String get previewIndex => 'Index d\'aperçu'; + @override String get packetLength => 'Longueur du paquet'; + @override String get filePresent => 'Fichier présent'; + @override String get fileReadable => 'Lisible par le serveur'; + @override String get streamPath => 'Chemin du flux'; @override String get optimizedForStreaming => 'Optimisé pour le streaming'; @override String get has64bitOffsets => 'Décalages 64 bits'; + @override String get protocol => 'Protocole'; + @override String get mediaType => 'Type de média'; + @override String get sourceKind => 'Type de source'; + @override String get optimizedVersion => 'Version optimisée'; + @override String get optimizationTarget => 'Cible d\'optimisation'; + @override String get deletedAt => 'Supprimé'; + @override String get remoteSource => 'Source distante'; + @override String get infiniteStream => 'Flux infini'; + @override String get directPlay => 'Lecture directe'; + @override String get directStream => 'Flux direct'; + @override String get transcoding => 'Transcodage'; + @override String get etag => 'ETag'; + @override String get versionId => 'ID de version'; + @override String get fileId => 'ID de fichier'; + @override String get defaultAudioTrack => 'Piste audio par défaut'; + @override String get defaultSubtitleTrack => 'Piste de sous-titres par défaut'; + @override String get subtitlesOff => 'Désactivés'; + @override String get flagDefault => 'Par défaut'; + @override String get flagForced => 'Forcé'; + @override String get flagSelected => 'Sélectionné'; + @override String get flagExternal => 'Externe'; + @override String get flagHearingImpaired => 'Sourds et malentendants'; + @override String get flagDub => 'Doublage'; + @override String get flagOriginal => 'Originale'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$fr extends Translations$mediaMenu$en { @override String get shufflePlay => 'Lecture aléatoire'; @override String get shuffleNotAvailableOffline => 'La lecture aléatoire n’est pas disponible hors ligne'; @override String get fileInfo => 'Informations sur le fichier'; + @override String get deleteEpisodeFromServer => 'Supprimer l\'épisode du serveur'; + @override String get deleteSeasonFromServer => 'Supprimer la saison du serveur'; + @override String get deleteShowFromServer => 'Supprimer la série du serveur'; + @override String get deleteMovieFromServer => 'Supprimer le film du serveur'; + @override String get deleteEpisodeTitle => 'Supprimer cet épisode ?'; + @override String get deleteSeasonTitle => 'Supprimer cette saison ?'; + @override String get deleteShowTitle => 'Supprimer cette série ?'; + @override String get deleteMovieTitle => 'Supprimer ce film ?'; + @override String get deleteEpisodeConfirm => 'Supprimer l\'épisode'; + @override String get deleteSeasonConfirm => 'Supprimer la saison'; + @override String get deleteShowConfirm => 'Supprimer la série'; + @override String get deleteMovieConfirm => 'Supprimer le film'; + @override String get deleteAnyway => 'Supprimer quand même'; + @override String confirmDeleteTarget({required Object title}) => 'Supprimer définitivement ${title} de votre serveur ?'; @override String get deleteMultipleWarning => 'Cela inclut tous les épisodes et leurs fichiers.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: 'Cela supprime ${n} épisode qu\'elle contient, ainsi que son fichier.', + other: 'Cela supprime les ${n} épisodes qu\'elle contient, ainsi que leurs fichiers.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: 'Cet élément est stocké sous forme de ${n} fichier, qui sera supprimé.', + other: 'Cet élément est stocké sur ${n} fichiers, et ils seront tous supprimés.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: '${n} autre épisode est stocké dans le même fichier et sera également supprimé :', + other: '${n} autres épisodes sont stockés dans le même fichier et seront également supprimés :', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy n\'a pas pu vérifier quels fichiers seront supprimés ; il risque donc d\'en supprimer plus que l\'élément nommé ci-dessus. Annulez et réessayez, ou supprimez quand même.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Votre serveur n\'a pas fourni les détails du fichier pour cet élément, Plezy ne peut donc pas vérifier quels fichiers seront supprimés. Il risque d\'en supprimer plus que l\'élément nommé ci-dessus.'; @override String get mediaDeletedSuccessfully => 'Élément média supprimé avec succès'; @override String get mediaFailedToDelete => 'Échec de la suppression de l\'élément média'; @override String get rate => 'Noter'; @@ -657,6 +786,9 @@ class _Translations$videoControls$fr extends Translations$videoControls$en { @override String get playNext => 'Lire l\'épisode suivant'; @override String get playButton => 'Lire'; @override String get pauseButton => 'Pause'; + @override String get playbackPaused => 'En pause'; + @override String get playbackResumed => 'En lecture'; + @override String get loadingVideo => 'Chargement de la vidéo'; @override String get showPlaybackControls => 'Afficher les commandes de lecture'; @override String get hidePlaybackControls => 'Masquer les commandes de lecture'; @override String seekBackwardButton({required Object seconds}) => 'Reculer de ${seconds} secondes'; @@ -726,6 +858,7 @@ class _Translations$messages$fr extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Supprimé de « Continuer à regarder »'; @override String errorLoading({required Object error}) => 'Erreur : ${error}'; + @override String get searchPartialResults => 'Certains serveurs multimédia n\'ont pas pu être interrogés. Affichage des résultats disponibles.'; @override String get streamInterrupted => 'La lecture a été interrompue. Appuyez sur Lecture ou avancez pour réessayer.'; @override String get liveStreamInterrupted => 'Le direct a été interrompu. Appuyez sur Lecture pour réessayer.'; @override String get fileInfoNotAvailable => 'Informations sur le fichier non disponibles'; @@ -764,6 +897,8 @@ class _Translations$messages$fr extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Passage au lecteur compatible...'; @override String get serverLimitTitle => 'Échec de la lecture'; @override String get serverLimitBody => 'Erreur serveur (HTTP 500). Une limite de bande passante/transcodage a probablement rejeté cette session. Demandez au propriétaire de l\'ajuster.'; + @override String get mediaUnreadableTitle => 'Fichier indisponible'; + @override String get mediaUnreadableBody => 'Le serveur a trouvé cet élément mais n\'a pas pu lire son fichier (HTTP 404). Le fichier a probablement été déplacé, supprimé, ou son stockage est hors ligne. Demandez au propriétaire du serveur de vérifier le fichier et de relancer l\'analyse de la bibliothèque.'; @override String get logsUploaded => 'Journaux envoyés'; @override String get logsUploadFailed => 'Échec de l’envoi des journaux'; @override String get logId => 'Identifiant du journal'; @@ -917,6 +1052,8 @@ class _Translations$connections$fr extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Session expirée pour ${name}'; @override String sessionExpiredMany({required Object count}) => 'Session expirée pour ${count} serveurs'; @override String get signInAgain => 'Se reconnecter'; + @override String editMediaBrowserTitle({required Object product}) => 'Modifier la connexion ${product}'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Ajoutez ou retirez des URL pour ${serverName}. Plezy utilisera l\'URL joignable avec la latence la plus faible.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$fr extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Échec de la recherche : ${error}'; + @override String get searchUnavailable => 'La recherche n\'a pu atteindre aucun serveur multimédia.'; @override String connectionTimeout({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}'; @override String get connectionFailed => 'Impossible de se connecter au serveur multimédia'; @override String unableToLoad({required Object context}) => 'Impossible de charger ${context}. Réessayez.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$fr extends Translations$logs$en { @override String get uploadLogs => 'Envoyer les journaux'; } +// Path: startup +class _Translations$startup$fr extends Translations$startup$en { + _Translations$startup$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy n\'a pas pu démarrer'; + @override String get failedBody => 'Une erreur s\'est produite au démarrage. Les détails ci-dessous identifient la cause.'; + @override String get failedBodyRepairable => 'Le fichier de paramètres enregistré de Plezy est endommagé et doit être reconstruit avant que Plezy ne puisse démarrer. Réessayer ne servira à rien — choisissez Réparer le stockage.'; + @override String get phaseLabel => 'Étape'; + @override String get showDetails => 'Afficher les détails'; + @override String get hideDetails => 'Masquer les détails'; + @override String get copyDetails => 'Copier les détails'; + @override String get detailsCopied => 'Détails copiés dans le presse-papiers'; + @override String get uploadDetails => 'Téléverser les détails'; + @override String get repairStorage => 'Réparer le stockage'; + @override String get repairTitle => 'Réparer les données stockées ?'; + @override String get repairBodyCommon => 'Le fichier de paramètres de Plezy est endommagé et illisible. La réparation rétablit tous les paramètres par défaut.'; + @override String get repairBodyOneCredential => 'Une connexion enregistrée est endommagée et illisible. La réparation ne supprime que celle-ci ; vos autres paramètres sont laissés intacts.'; + @override String get repairBodySignInsKept => 'Vos serveurs et profils devraient rester connectés.'; + @override String get repairBodySignInsLost => 'La clé qui protège vos connexions enregistrées ne peut pas être récupérée à partir de ce fichier ; vous devrez donc vous reconnecter à chaque serveur et profil. Rien sur votre serveur multimédia n\'est affecté.'; + @override String get repairBodySessionsUncertain => 'Les trackers (MAL, AniList, Simkl, Trakt) et Seerr sont stockés séparément et peuvent ou non être conservés. Plezy vous indiquera exactement ce qu\'il a gardé.'; + @override String get repairConfirm => 'Réparer'; + @override String get repairSucceeded => 'Stockage réparé'; + @override String get repairNeedsRestart => 'Stockage réparé — redémarrage requis'; + @override String get restartRequiredBody => 'Vos données ont été réparées, mais Plezy doit redémarrer pour pouvoir les utiliser. Fermez Plezy puis rouvrez-le.'; + @override String get quitPlezy => 'Quitter Plezy'; + @override String get repairFailed => 'Échec de la réparation'; + @override String get repairKeptSignIns => 'Vos serveurs et profils sont toujours connectés.'; + @override String get repairLostSignIns => 'La clé qui protégeait vos connexions enregistrées n\'a pas pu être récupérée. Vous devrez vous reconnecter à chaque serveur et profil.'; + @override String get repairLostSessions => 'Au moins une connexion à un tracker ou à Seerr a été perdue et devra être rétablie.'; + @override String get backupTitle => 'Une copie du fichier endommagé a été conservée'; + @override String get backupWarning => 'Elle contient vos identifiants de connexion. Ne la téléversez pas et ne la partagez pas.'; + @override String get deleteBackup => 'Supprimer la copie'; + @override String get backupDeleted => 'Copie supprimée.'; + @override String get previousFailureTitle => 'Plezy n\'a pas réussi à démarrer la dernière fois'; +} + // Path: licenses class _Translations$licenses$fr extends Translations$licenses$en { _Translations$licenses$fr._(TranslationsFr root) : this._root = root, super.internal(root); @@ -1097,8 +1274,8 @@ class _Translations$navigation$fr extends Translations$navigation$en { final TranslationsFr _root; // ignore: unused_field // Translations - @override String get libraries => 'Bibliothèques'; - @override String get downloads => 'Téléchargements'; + @override String get libraries => 'Bibliothèque'; + @override String get downloads => 'Téléchargement'; @override String get liveTv => 'TV en direct'; @override String get explore => 'Explorer'; } @@ -1132,6 +1309,20 @@ class _Translations$explore$fr extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Aucun résultat pour "${query}"'; @override String searchPrompt({required Object source}) => 'Recherchez des films et des séries sur ${source}.'; @override String get searchFailed => 'Échec de la recherche. Vérifiez votre connexion et réessayez.'; + @override late final _Translations$explore$badge$fr badge = _Translations$explore$badge$fr._(_root); + @override late final _Translations$explore$stats$fr stats = _Translations$explore$stats$fr._(_root); + @override late final _Translations$explore$season$fr season = _Translations$explore$season$fr._(_root); + @override late final _Translations$explore$format$fr format = _Translations$explore$format$fr._(_root); + @override late final _Translations$explore$sourceMaterial$fr sourceMaterial = _Translations$explore$sourceMaterial$fr._(_root); + @override late final _Translations$explore$creditRole$fr creditRole = _Translations$explore$creditRole$fr._(_root); + @override late final _Translations$explore$relation$fr relation = _Translations$explore$relation$fr._(_root); + @override String broadcast({required Object day, required Object time}) => 'Diffusé le ${day} à ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Diffusé le ${day} à ${time} ${timezone}'; + @override late final _Translations$explore$detail$fr detail = _Translations$explore$detail$fr._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: '${n} résultat', + other: '${n} résultats', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$fr extends Translations$downloads$en { @override String get editSyncRule => 'Modifier la règle de synchronisation'; @override String get removeSyncRule => 'Supprimer la règle de synchronisation'; @override String removeSyncRuleConfirm({required Object title}) => 'Arrêter la synchronisation de « ${title} » ? Les épisodes téléchargés seront conservés.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Arrêter la synchronisation de « ${title} » ?'; + @override String get deleteSyncRuleDownloads => 'Supprimer aussi les téléchargements associés'; + @override String get deleteSyncRuleDownloadsDescription => 'Les téléchargements utilisés par une autre règle de synchronisation ou un autre profil seront conservés.'; @override String syncRuleCreated({required Object count}) => 'Règle de synchronisation créée — ${count} épisodes non vus conservés'; @override String get syncRuleUpdated => 'Règle de synchronisation mise à jour'; @override String get syncRuleRemoved => 'Règle de synchronisation supprimée'; + @override String get syncRuleAndDownloadsRemoved => 'Règle de synchronisation et téléchargements associés supprimés'; + @override String get syncRuleCleanupBusy => 'Les règles de synchronisation sont en cours de mise à jour. Réessayez dans un instant.'; + @override String get syncRuleCleanupUnavailable => 'Les téléchargements associés n\'ont pas pu être identifiés en toute sécurité. Reconnectez le serveur et réessayez, ou retirez la règle sans supprimer les téléchargements.'; @override String syncedNewEpisodes({required Object count, required Object title}) => '${count} nouveaux épisodes synchronisés pour ${title}'; @override String get activeSyncRules => 'Règles de synchronisation'; @override String get noSyncRules => 'Aucune règle de synchronisation'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$fr extends Translations$addServer$en { final TranslationsFr _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Ajouter un serveur ${product}'; @override String get serverUrls => 'URL du serveur'; @override String get serverUrlsHelper => 'Plusieurs URL possibles, séparées par des virgules.'; @override String get findServer => 'Rechercher un serveur'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Recherche de serveurs ${product} locaux...'; + @override String localMediaBrowserServers({required Object product}) => 'Serveurs ${product} locaux'; @override String get username => 'Nom d\'utilisateur'; @override String get password => 'Mot de passe'; @override String get signIn => 'Se connecter'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$fr extends Translations$addServer$en { @override String get addPlexTitle => 'Se connecter avec Plex'; @override String get pinExpired => 'Le PIN a expiré avant la connexion. Veuillez réessayer.'; @override String failedToRegisterAccount({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Saisissez l\'URL de votre serveur ${product}'; @override String get addConnectionTitle => 'Ajouter une connexion'; @override String addConnectionTitleScoped({required Object name}) => 'Ajouter à ${name}'; @override String get signInWithPlexCard => 'Se connecter avec Plex'; @override String get signInWithPlexCardSubtitle => 'Autorisez cet appareil. Les serveurs partagés sont ajoutés.'; @override String get signInWithPlexCardSubtitleScoped => 'Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Se connecter à ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Saisissez l\'URL de votre serveur, votre nom d\'utilisateur et votre mot de passe.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Connectez-vous à votre serveur ${product}. Sera associé à ${name}.'; @override String get borrowFromAnotherProfile => 'Emprunter à un autre profil'; @override String get borrowFromAnotherProfileSubtitle => 'Réutiliser la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$fr extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get critic => 'Critiques'; + @override String get audience => 'Public'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Critiques Rotten Tomatoes'; + @override String get rottenTomatoesAudience => 'Public Rotten Tomatoes'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$fr extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$fr._(TranslationsFr root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$fr extends Translations$explore$status$en { @override String get upcoming => 'À venir'; } +// Path: explore.badge +class _Translations$explore$badge$fr extends Translations$explore$badge$en { + _Translations$explore$badge$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} populaire'; + @override String rankAiring({required Object n}) => '#${n} en diffusion'; + @override String rankRated({required Object n}) => '#${n} mieux noté'; + @override String rankFavorited({required Object n}) => '#${n} favoris'; + @override String rankTrending({required Object n}) => '#${n} tendance'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} de ${season}'; + @override String watchingNow({required Object n}) => '${n} regardent'; + @override String get available => 'Disponible'; + @override String get partiallyAvailable => 'Partiellement disponible'; + @override String get availableIn4k => '4K disponible'; + @override String get requested => 'Demandé'; + @override String get pendingApproval => 'En attente d\'approbation'; + @override String get processing => 'En cours de traitement'; + @override String get declined => 'Refusé'; + @override String get requestFailed => 'Échec de la demande'; + @override String get requested4k => '4K demandé'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} saisons'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Ép ${episode} dans ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Prochain dans ${duration}'; + @override String episodesShort({required Object n}) => '${n} ép'; + @override String minutesPerEpisode({required Object n}) => '${n} min/ép'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$fr extends Translations$explore$stats$en { + _Translations$explore$stats$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} répertoriés'; + @override String viewersDay({required Object n}) => '${n} vus aujourd\'hui'; + @override String viewersWeek({required Object n}) => '${n} vus cette semaine'; + @override String viewersMonth({required Object n}) => '${n} vus ce mois-ci'; + @override String viewersYear({required Object n}) => '${n} vus cette année'; + @override String viewersAllTime({required Object n}) => '${n} spectateurs'; + @override String planning({required Object n}) => '${n} prévoient de le regarder'; + @override String favorited({required Object n}) => '${n} favoris'; + @override String dropRate({required Object percent}) => '${percent} l\'ont abandonné'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: '${n} commentaire', + other: '${n} commentaires', + ); + @override String votes({required Object n}) => '${n} votes'; + @override String watching({required Object n}) => '${n} le regardent'; + @override String completed({required Object n}) => '${n} l\'ont terminé'; + @override String onHold({required Object n}) => '${n} en pause'; + @override String dropped({required Object n}) => '${n} ont abandonné'; +} + +// Path: explore.season +class _Translations$explore$season$fr extends Translations$explore$season$en { + _Translations$explore$season$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get winter => 'Hiver'; + @override String get spring => 'Printemps'; + @override String get summer => 'Été'; + @override String get fall => 'Automne'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$fr extends Translations$explore$format$en { + _Translations$explore$format$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'Court TV'; + @override String get movie => 'Film'; + @override String get special => 'Spécial'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musique'; + @override String get other => 'Autre'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$fr extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get original => 'Original'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Jeu'; + @override String get webComic => 'Webcomic'; + @override String get musicRelease => 'Musique'; + @override String get otherMedia => 'Autre'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$fr extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get director => 'Réalisateur'; + @override String get writer => 'Scénariste'; + @override String get producer => 'Producteur'; + @override String get creator => 'Créateur'; + @override String get composer => 'Compositeur'; +} + +// Path: explore.relation +class _Translations$explore$relation$fr extends Translations$explore$relation$en { + _Translations$explore$relation$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Préquelle'; + @override String get sequel => 'Suite'; + @override String get sideStory => 'Histoire parallèle'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Version alternative'; + @override String get summary => 'Résumé'; + @override String get parentStory => 'Histoire principale'; + @override String get adaptation => 'Adaptation'; + @override String get other => 'Lié'; +} + +// Path: explore.detail +class _Translations$explore$detail$fr extends Translations$explore$detail$en { + _Translations$explore$detail$fr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Titre original'; + @override String get alsoKnownAs => 'Également connu sous'; + @override String get studios => 'Studios'; + @override String get country => 'Pays'; + @override String get language => 'Langue'; + @override String get released => 'Sorti'; + @override String get physicalRelease => 'En disque'; + @override String get ended => 'Terminé'; + @override String addedOn({required Object date}) => 'Ajouté le ${date}'; + @override String get yourRating => 'Votre note'; + @override String get budget => 'Budget'; + @override String get revenue => 'Box-office'; + @override String get contentAdvisory => 'Recommandation d\'âge'; + @override String get tags => 'Tags'; + @override String get revealSpoilerTags => 'Afficher les tags spoiler'; + @override String get links => 'Liens'; + @override String get watchOn => 'Regarder sur'; + @override String get watchTrailer => 'Regarder la bande-annonce'; + @override String openOn({required Object site}) => 'Ouvrir sur ${site}'; + @override String get crew => 'Équipe'; + @override String get ratings => 'Notes'; + @override String get schedule => 'Programme'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: 'Recommandé par ${n} utilisateur', + other: 'Recommandé par ${n} utilisateurs', + ); + @override String recommendedBy({required Object who}) => 'Recommandé par ${who}'; + @override String favoritedBy({required Object who}) => 'Ajouté aux favoris par ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} pas encore diffusés'; + @override String recommendedByPercent({required Object percent}) => 'Recommandé par ${percent} des spectateurs'; + @override String get relatedTitles => 'Titres liés'; + @override String get background => 'Contexte'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$fr extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$fr._(TranslationsFr root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$fr extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsFr { 'auth.waitingForAuth' => 'En attente d\'authentification...\nConnectez-vous depuis votre navigateur.', 'auth.useBrowser' => 'Utiliser le navigateur', 'auth.or' => 'ou', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Se connecter à ${product}', 'auth.useQuickConnect' => 'Utiliser Quick Connect', 'auth.quickConnectInstructions' => 'Ouvrez Quick Connect dans Jellyfin et saisissez ce code.', 'auth.quickConnectWaiting' => 'En attente d\'approbation…', @@ -2228,7 +2634,7 @@ extension on TranslationsFr { 'common.pause' => 'Pause', 'common.resume' => 'Reprendre', 'common.error' => 'Erreur', - 'common.search' => 'Rechercher', + 'common.search' => 'Recherche', 'common.home' => 'Accueil', 'common.back' => 'Retour', 'common.settings' => 'Paramètres', @@ -2248,6 +2654,17 @@ extension on TranslationsFr { 'common.fullscreen' => 'Plein écran', 'common.exitFullscreen' => 'Quitter le plein écran', 'common.pressBackAgainToExit' => 'Appuyez à nouveau sur retour pour quitter', + 'common.ratingSource.critic' => 'Critiques', + 'common.ratingSource.audience' => 'Public', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Critiques Rotten Tomatoes', + 'common.ratingSource.rottenTomatoesAudience' => 'Public Rotten Tomatoes', 'screens.licenses' => 'Licences', 'screens.switchProfile' => 'Changer de profil', 'screens.subtitleStyling' => 'Configuration des sous-titres', @@ -2284,6 +2701,7 @@ extension on TranslationsFr { 'settings.darkTheme' => 'Sombre', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Densité des bibliothèques', + 'settings.displayScale' => 'Échelle d\'affichage', 'settings.compact' => 'Compact', 'settings.comfortable' => 'Confortable', 'settings.tvCornerSpotlightBackdrop' => 'Illustration en vedette dans le coin', @@ -2333,6 +2751,11 @@ extension on TranslationsFr { 'settings.bufferSizeMB' => ({required Object size}) => '${size} Mo', 'settings.bufferSizeAuto' => 'Automatique (recommandé)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} Mo de mémoire disponible. Un tampon de ${size} Mo peut affecter la lecture.', + 'settings.playbackBuffer' => 'Tampon de lecture', + 'settings.playbackBufferAuto' => 'Auto (recommandé)', + 'settings.playbackBufferLarge' => 'Grand', + 'settings.playbackBufferExtraLarge' => 'Très grand', + 'settings.playbackBufferDescription' => 'Tampon supplémentaire contre les connexions instables. Également limité par la taille du tampon.', 'settings.defaultQualityTitle' => 'Qualité par défaut', 'settings.musicQualityTitle' => 'Qualité de la musique', 'settings.subtitleStyling' => 'Style des sous-titres', @@ -2366,6 +2789,9 @@ extension on TranslationsFr { 'settings.debugLoggingDescription' => 'Activer la journalisation détaillée pour le dépannage', 'settings.viewLogs' => 'Voir les journaux', 'settings.viewLogsDescription' => 'Voir les journaux de l’application', + 'settings.clearImageCache' => 'Vider le cache d\'images', + 'settings.clearImageCacheDescription' => 'Vide les affiches et vignettes en cache. Les images peuvent se charger plus lentement jusqu\'à leur prochain téléchargement.', + 'settings.clearImageCacheSuccess' => 'Cache d\'images vidé avec succès', 'settings.resetSettings' => 'Réinitialiser les paramètres', 'settings.resetSettingsDescription' => 'Restaurer les paramètres par défaut. Action irréversible.', 'settings.resetSettingsSuccess' => 'Réinitialisation des paramètres réussie', @@ -2549,29 +2975,118 @@ extension on TranslationsFr { 'hotkeys.actions.skipMarker' => 'Passer l\'intro/le générique', 'hotkeys.actions.screenshot' => 'Prendre une capture d\'écran', 'fileInfo.title' => 'Informations sur le fichier', + 'fileInfo.overview' => 'Aperçu', 'fileInfo.video' => 'Vidéo', 'fileInfo.audio' => 'Audio', 'fileInfo.subtitles' => 'Sous-titres', + 'fileInfo.images' => 'Images intégrées', + 'fileInfo.dataStreams' => 'Flux de données', + 'fileInfo.lyrics' => 'Paroles', 'fileInfo.file' => 'Fichier', + 'fileInfo.attachments' => 'Pièces jointes', + 'fileInfo.delivery' => 'Diffusion', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Version ${index} sur ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Fichier ${index} sur ${count}', + 'fileInfo.noStreams' => 'Le serveur n\'a signalé aucun flux pour ce fichier.', + 'fileInfo.copyPath' => 'Copier le chemin', + 'fileInfo.pathCopied' => 'Chemin du fichier copié', 'fileInfo.codec' => 'Codec', + 'fileInfo.codecTag' => 'Balise de codec', 'fileInfo.resolution' => 'Résolution', + 'fileInfo.codedResolution' => 'Résolution codée', 'fileInfo.bitrate' => 'Débit', 'fileInfo.frameRate' => 'Fréquence d\'images', + 'fileInfo.rotation' => 'Rotation', + 'fileInfo.comment' => 'Commentaire', + 'fileInfo.audioDescription' => 'Audiodescription', + 'fileInfo.headerCompression' => 'Compression d\'en-tête', + 'fileInfo.sidecarFile' => 'Fichier annexe', + 'fileInfo.transportTimestamp' => 'Horodatage du transport', + 'fileInfo.displayOffset' => 'Décalage d\'affichage', + 'fileInfo.previewFailureCode' => 'Code d\'échec de l\'aperçu', + 'fileInfo.previewRetries' => 'Tentatives d\'aperçu', 'fileInfo.aspectRatio' => 'Format d\'image', + 'fileInfo.pixelAspectRatio' => 'Rapport d\'aspect des pixels', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Niveau', 'fileInfo.bitDepth' => 'Profondeur de bits', + 'fileInfo.pixelFormat' => 'Format de pixels', 'fileInfo.colorSpace' => 'Espace colorimétrique', 'fileInfo.colorRange' => 'Gamme de couleurs', 'fileInfo.colorPrimaries' => 'Couleurs primaires', + 'fileInfo.colorTransfer' => 'Transfert de couleur', 'fileInfo.chromaSubsampling' => 'Sous-échantillonnage chromatique', + 'fileInfo.chromaLocation' => 'Position du chroma', + 'fileInfo.scanType' => 'Type de balayage', + 'fileInfo.interlaced' => 'Entrelacé', + 'fileInfo.anamorphic' => 'Anamorphique', + 'fileInfo.referenceFrames' => 'Images de référence', + 'fileInfo.dynamicRange' => 'Plage dynamique', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Niveau Dolby Vision', + 'fileInfo.dolbyVisionVersion' => 'Version Dolby Vision', + 'fileInfo.dolbyVisionLayers' => 'Couches Dolby Vision', + 'fileInfo.baseLayerCompatibility' => 'Compatibilité de la couche de base', + 'fileInfo.avcBitstream' => 'Flux binaire AVC', + 'fileInfo.nalLengthSize' => 'Taille de longueur NAL', + 'fileInfo.scalingMatrix' => 'Matrice de mise à l\'échelle personnalisée', + 'fileInfo.streamIdentifier' => 'Identifiant de flux', + 'fileInfo.streamIndex' => 'Index de flux', + 'fileInfo.streamId' => 'ID de flux', + 'fileInfo.language' => 'Langue', + 'fileInfo.languageCode' => 'Code de langue', + 'fileInfo.streamTitle' => 'Titre de la piste', 'fileInfo.channels' => 'Canaux', + 'fileInfo.sampleRate' => 'Fréquence d\'échantillonnage', + 'fileInfo.spatialAudio' => 'Audio spatial', + 'fileInfo.textBased' => 'Basé sur du texte', + 'fileInfo.subtitleFormat' => 'Format annexe', + 'fileInfo.provider' => 'Fournisseur', + 'fileInfo.matchScore' => 'Score de correspondance', + 'fileInfo.externalDelivery' => 'Peut être diffusé séparément', + 'fileInfo.sidecarPath' => 'Chemin du fichier annexe', + 'fileInfo.sourceStream' => 'Copié depuis', + 'fileInfo.temporary' => 'Temporaire', + 'fileInfo.timeBase' => 'Base de temps', 'fileInfo.overallBitrate' => 'Débit global', 'fileInfo.path' => 'Chemin', + 'fileInfo.fileName' => 'Nom du fichier', 'fileInfo.size' => 'Taille', + 'fileInfo.totalSize' => 'Taille totale', 'fileInfo.container' => 'Conteneur', 'fileInfo.duration' => 'Durée', + 'fileInfo.previewThumbnails' => 'Vignettes d\'aperçu', + 'fileInfo.previewIndex' => 'Index d\'aperçu', + 'fileInfo.packetLength' => 'Longueur du paquet', + 'fileInfo.filePresent' => 'Fichier présent', + 'fileInfo.fileReadable' => 'Lisible par le serveur', + 'fileInfo.streamPath' => 'Chemin du flux', 'fileInfo.optimizedForStreaming' => 'Optimisé pour le streaming', 'fileInfo.has64bitOffsets' => 'Décalages 64 bits', + 'fileInfo.protocol' => 'Protocole', + 'fileInfo.mediaType' => 'Type de média', + 'fileInfo.sourceKind' => 'Type de source', + 'fileInfo.optimizedVersion' => 'Version optimisée', + 'fileInfo.optimizationTarget' => 'Cible d\'optimisation', + 'fileInfo.deletedAt' => 'Supprimé', + 'fileInfo.remoteSource' => 'Source distante', + 'fileInfo.infiniteStream' => 'Flux infini', + 'fileInfo.directPlay' => 'Lecture directe', + 'fileInfo.directStream' => 'Flux direct', + 'fileInfo.transcoding' => 'Transcodage', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'ID de version', + 'fileInfo.fileId' => 'ID de fichier', + 'fileInfo.defaultAudioTrack' => 'Piste audio par défaut', + 'fileInfo.defaultSubtitleTrack' => 'Piste de sous-titres par défaut', + 'fileInfo.subtitlesOff' => 'Désactivés', + 'fileInfo.flagDefault' => 'Par défaut', + 'fileInfo.flagForced' => 'Forcé', + 'fileInfo.flagSelected' => 'Sélectionné', + 'fileInfo.flagExternal' => 'Externe', + 'fileInfo.flagHearingImpaired' => 'Sourds et malentendants', + 'fileInfo.flagDub' => 'Doublage', + 'fileInfo.flagOriginal' => 'Originale', 'mediaMenu.markAsWatched' => 'Marquer comme vu', 'mediaMenu.markAsUnwatched' => 'Marquer comme non visionné', 'mediaMenu.removeFromContinueWatching' => 'Supprimer de la liste "Continuer à regarder"', @@ -2580,7 +3095,28 @@ extension on TranslationsFr { 'mediaMenu.shufflePlay' => 'Lecture aléatoire', 'mediaMenu.shuffleNotAvailableOffline' => 'La lecture aléatoire n’est pas disponible hors ligne', 'mediaMenu.fileInfo' => 'Informations sur le fichier', + 'mediaMenu.deleteEpisodeFromServer' => 'Supprimer l\'épisode du serveur', + 'mediaMenu.deleteSeasonFromServer' => 'Supprimer la saison du serveur', + 'mediaMenu.deleteShowFromServer' => 'Supprimer la série du serveur', + 'mediaMenu.deleteMovieFromServer' => 'Supprimer le film du serveur', + 'mediaMenu.deleteEpisodeTitle' => 'Supprimer cet épisode ?', + 'mediaMenu.deleteSeasonTitle' => 'Supprimer cette saison ?', + 'mediaMenu.deleteShowTitle' => 'Supprimer cette série ?', + 'mediaMenu.deleteMovieTitle' => 'Supprimer ce film ?', + 'mediaMenu.deleteEpisodeConfirm' => 'Supprimer l\'épisode', + 'mediaMenu.deleteSeasonConfirm' => 'Supprimer la saison', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Supprimer la série', + 'mediaMenu.deleteMovieConfirm' => 'Supprimer le film', + 'mediaMenu.deleteAnyway' => 'Supprimer quand même', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Supprimer définitivement ${title} de votre serveur ?', 'mediaMenu.deleteMultipleWarning' => 'Cela inclut tous les épisodes et leurs fichiers.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: 'Cela supprime ${n} épisode qu\'elle contient, ainsi que son fichier.', other: 'Cela supprime les ${n} épisodes qu\'elle contient, ainsi que leurs fichiers.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: 'Cet élément est stocké sous forme de ${n} fichier, qui sera supprimé.', other: 'Cet élément est stocké sur ${n} fichiers, et ils seront tous supprimés.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} autre épisode est stocké dans le même fichier et sera également supprimé :', other: '${n} autres épisodes sont stockés dans le même fichier et seront également supprimés :', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy n\'a pas pu vérifier quels fichiers seront supprimés ; il risque donc d\'en supprimer plus que l\'élément nommé ci-dessus. Annulez et réessayez, ou supprimez quand même.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Votre serveur n\'a pas fourni les détails du fichier pour cet élément, Plezy ne peut donc pas vérifier quels fichiers seront supprimés. Il risque d\'en supprimer plus que l\'élément nommé ci-dessus.', 'mediaMenu.mediaDeletedSuccessfully' => 'Élément média supprimé avec succès', 'mediaMenu.mediaFailedToDelete' => 'Échec de la suppression de l\'élément média', 'mediaMenu.rate' => 'Noter', @@ -2646,6 +3182,9 @@ extension on TranslationsFr { 'videoControls.playNext' => 'Lire l\'épisode suivant', 'videoControls.playButton' => 'Lire', 'videoControls.pauseButton' => 'Pause', + 'videoControls.playbackPaused' => 'En pause', + 'videoControls.playbackResumed' => 'En lecture', + 'videoControls.loadingVideo' => 'Chargement de la vidéo', 'videoControls.showPlaybackControls' => 'Afficher les commandes de lecture', 'videoControls.hidePlaybackControls' => 'Masquer les commandes de lecture', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Reculer de ${seconds} secondes', @@ -2700,8 +3239,6 @@ extension on TranslationsFr { 'videoControls.subtitleDownloaded' => 'Sous-titre téléchargé', 'videoControls.subtitleDownloadedNotApplied' => 'Le sous-titre a été téléchargé, mais n’a pas pu être sélectionné', 'videoControls.subtitleDownloadFailed' => 'Échec du téléchargement du sous-titre', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Rechercher des langues...', 'messages.markedAsWatched' => 'Marqué comme vu', 'messages.markedAsUnwatched' => 'Marqué comme non vu', @@ -2711,6 +3248,7 @@ extension on TranslationsFr { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} téléchargement vu supprimé automatiquement', other: '${n} téléchargements vus supprimés automatiquement', ), 'messages.removedFromContinueWatching' => 'Supprimé de « Continuer à regarder »', 'messages.errorLoading' => ({required Object error}) => 'Erreur : ${error}', + 'messages.searchPartialResults' => 'Certains serveurs multimédia n\'ont pas pu être interrogés. Affichage des résultats disponibles.', 'messages.streamInterrupted' => 'La lecture a été interrompue. Appuyez sur Lecture ou avancez pour réessayer.', 'messages.liveStreamInterrupted' => 'Le direct a été interrompu. Appuyez sur Lecture pour réessayer.', 'messages.fileInfoNotAvailable' => 'Informations sur le fichier non disponibles', @@ -2749,6 +3287,8 @@ extension on TranslationsFr { 'messages.switchingToCompatiblePlayer' => 'Passage au lecteur compatible...', 'messages.serverLimitTitle' => 'Échec de la lecture', 'messages.serverLimitBody' => 'Erreur serveur (HTTP 500). Une limite de bande passante/transcodage a probablement rejeté cette session. Demandez au propriétaire de l\'ajuster.', + 'messages.mediaUnreadableTitle' => 'Fichier indisponible', + 'messages.mediaUnreadableBody' => 'Le serveur a trouvé cet élément mais n\'a pas pu lire son fichier (HTTP 404). Le fichier a probablement été déplacé, supprimé, ou son stockage est hors ligne. Demandez au propriétaire du serveur de vérifier le fichier et de relancer l\'analyse de la bibliothèque.', 'messages.logsUploaded' => 'Journaux envoyés', 'messages.logsUploadFailed' => 'Échec de l’envoi des journaux', 'messages.logId' => 'Identifiant du journal', @@ -2857,6 +3397,8 @@ extension on TranslationsFr { 'connections.sessionExpiredOne' => ({required Object name}) => 'Session expirée pour ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Session expirée pour ${count} serveurs', 'connections.signInAgain' => 'Se reconnecter', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Modifier la connexion ${product}', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Ajoutez ou retirez des URL pour ${serverName}. Plezy utilisera l\'URL joignable avec la latence la plus faible.', 'discover.title' => 'Découvrir', 'discover.noContentAvailable' => 'Aucun contenu disponible', 'discover.addMediaToLibraries' => 'Ajoutez des médias à vos bibliothèques', @@ -2882,6 +3424,7 @@ extension on TranslationsFr { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min restantes', 'discover.moreLikeThis' => 'Plus de contenus similaires', 'errors.searchFailed' => ({required Object error}) => 'Échec de la recherche : ${error}', + 'errors.searchUnavailable' => 'La recherche n\'a pu atteindre aucun serveur multimédia.', 'errors.connectionTimeout' => ({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}', 'errors.connectionFailed' => 'Impossible de se connecter au serveur multimédia', 'errors.unableToLoad' => ({required Object context}) => 'Impossible de charger ${context}. Réessayez.', @@ -2989,12 +3532,42 @@ extension on TranslationsFr { 'logs.clearLogs' => 'Effacer les journaux', 'logs.copyLogs' => 'Copier les journaux', 'logs.uploadLogs' => 'Envoyer les journaux', + 'startup.failedTitle' => 'Plezy n\'a pas pu démarrer', + 'startup.failedBody' => 'Une erreur s\'est produite au démarrage. Les détails ci-dessous identifient la cause.', + 'startup.failedBodyRepairable' => 'Le fichier de paramètres enregistré de Plezy est endommagé et doit être reconstruit avant que Plezy ne puisse démarrer. Réessayer ne servira à rien — choisissez Réparer le stockage.', + 'startup.phaseLabel' => 'Étape', + 'startup.showDetails' => 'Afficher les détails', + 'startup.hideDetails' => 'Masquer les détails', + 'startup.copyDetails' => 'Copier les détails', + 'startup.detailsCopied' => 'Détails copiés dans le presse-papiers', + 'startup.uploadDetails' => 'Téléverser les détails', + 'startup.repairStorage' => 'Réparer le stockage', + 'startup.repairTitle' => 'Réparer les données stockées ?', + 'startup.repairBodyCommon' => 'Le fichier de paramètres de Plezy est endommagé et illisible. La réparation rétablit tous les paramètres par défaut.', + 'startup.repairBodyOneCredential' => 'Une connexion enregistrée est endommagée et illisible. La réparation ne supprime que celle-ci ; vos autres paramètres sont laissés intacts.', + 'startup.repairBodySignInsKept' => 'Vos serveurs et profils devraient rester connectés.', + 'startup.repairBodySignInsLost' => 'La clé qui protège vos connexions enregistrées ne peut pas être récupérée à partir de ce fichier ; vous devrez donc vous reconnecter à chaque serveur et profil. Rien sur votre serveur multimédia n\'est affecté.', + 'startup.repairBodySessionsUncertain' => 'Les trackers (MAL, AniList, Simkl, Trakt) et Seerr sont stockés séparément et peuvent ou non être conservés. Plezy vous indiquera exactement ce qu\'il a gardé.', + 'startup.repairConfirm' => 'Réparer', + 'startup.repairSucceeded' => 'Stockage réparé', + 'startup.repairNeedsRestart' => 'Stockage réparé — redémarrage requis', + 'startup.restartRequiredBody' => 'Vos données ont été réparées, mais Plezy doit redémarrer pour pouvoir les utiliser. Fermez Plezy puis rouvrez-le.', + 'startup.quitPlezy' => 'Quitter Plezy', + 'startup.repairFailed' => 'Échec de la réparation', + 'startup.repairKeptSignIns' => 'Vos serveurs et profils sont toujours connectés.', + 'startup.repairLostSignIns' => 'La clé qui protégeait vos connexions enregistrées n\'a pas pu être récupérée. Vous devrez vous reconnecter à chaque serveur et profil.', + 'startup.repairLostSessions' => 'Au moins une connexion à un tracker ou à Seerr a été perdue et devra être rétablie.', + 'startup.backupTitle' => 'Une copie du fichier endommagé a été conservée', + 'startup.backupWarning' => 'Elle contient vos identifiants de connexion. Ne la téléversez pas et ne la partagez pas.', + 'startup.deleteBackup' => 'Supprimer la copie', + 'startup.backupDeleted' => 'Copie supprimée.', + 'startup.previousFailureTitle' => 'Plezy n\'a pas réussi à démarrer la dernière fois', 'licenses.relatedPackages' => 'Paquets associés', 'licenses.license' => 'Licence', 'licenses.licenseNumber' => ({required Object number}) => 'Licence ${number}', 'licenses.licensesCount' => ({required Object count}) => '${count} licences', - 'navigation.libraries' => 'Bibliothèques', - 'navigation.downloads' => 'Téléchargements', + 'navigation.libraries' => 'Bibliothèque', + 'navigation.downloads' => 'Téléchargement', 'navigation.liveTv' => 'TV en direct', 'navigation.explore' => 'Explorer', 'explore.title' => 'Explorer', @@ -3032,6 +3605,113 @@ extension on TranslationsFr { 'explore.searchEmpty' => ({required Object query}) => 'Aucun résultat pour "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Recherchez des films et des séries sur ${source}.', 'explore.searchFailed' => 'Échec de la recherche. Vérifiez votre connexion et réessayez.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} populaire', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} en diffusion', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} mieux noté', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favoris', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} tendance', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} de ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} regardent', + 'explore.badge.available' => 'Disponible', + 'explore.badge.partiallyAvailable' => 'Partiellement disponible', + 'explore.badge.availableIn4k' => '4K disponible', + 'explore.badge.requested' => 'Demandé', + 'explore.badge.pendingApproval' => 'En attente d\'approbation', + 'explore.badge.processing' => 'En cours de traitement', + 'explore.badge.declined' => 'Refusé', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Échec de la demande', + 'explore.badge.requested4k' => '4K demandé', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} saisons', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Ép ${episode} dans ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Prochain dans ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} ép', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/ép', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} répertoriés', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} vus aujourd\'hui', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} vus cette semaine', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} vus ce mois-ci', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} vus cette année', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} spectateurs', + 'explore.stats.planning' => ({required Object n}) => '${n} prévoient de le regarder', + 'explore.stats.favorited' => ({required Object n}) => '${n} favoris', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} l\'ont abandonné', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} commentaire', other: '${n} commentaires', ), + 'explore.stats.votes' => ({required Object n}) => '${n} votes', + 'explore.stats.watching' => ({required Object n}) => '${n} le regardent', + 'explore.stats.completed' => ({required Object n}) => '${n} l\'ont terminé', + 'explore.stats.onHold' => ({required Object n}) => '${n} en pause', + 'explore.stats.dropped' => ({required Object n}) => '${n} ont abandonné', + 'explore.season.winter' => 'Hiver', + 'explore.season.spring' => 'Printemps', + 'explore.season.summer' => 'Été', + 'explore.season.fall' => 'Automne', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'Court TV', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Spécial', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musique', + 'explore.format.other' => 'Autre', + 'explore.sourceMaterial.original' => 'Original', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Jeu', + 'explore.sourceMaterial.webComic' => 'Webcomic', + 'explore.sourceMaterial.musicRelease' => 'Musique', + 'explore.sourceMaterial.otherMedia' => 'Autre', + 'explore.creditRole.director' => 'Réalisateur', + 'explore.creditRole.writer' => 'Scénariste', + 'explore.creditRole.producer' => 'Producteur', + 'explore.creditRole.creator' => 'Créateur', + 'explore.creditRole.composer' => 'Compositeur', + 'explore.relation.prequel' => 'Préquelle', + 'explore.relation.sequel' => 'Suite', + 'explore.relation.sideStory' => 'Histoire parallèle', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Version alternative', + 'explore.relation.summary' => 'Résumé', + 'explore.relation.parentStory' => 'Histoire principale', + 'explore.relation.adaptation' => 'Adaptation', + 'explore.relation.other' => 'Lié', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Diffusé le ${day} à ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Diffusé le ${day} à ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Titre original', + 'explore.detail.alsoKnownAs' => 'Également connu sous', + 'explore.detail.studios' => 'Studios', + 'explore.detail.country' => 'Pays', + 'explore.detail.language' => 'Langue', + 'explore.detail.released' => 'Sorti', + 'explore.detail.physicalRelease' => 'En disque', + 'explore.detail.ended' => 'Terminé', + 'explore.detail.addedOn' => ({required Object date}) => 'Ajouté le ${date}', + 'explore.detail.yourRating' => 'Votre note', + 'explore.detail.budget' => 'Budget', + 'explore.detail.revenue' => 'Box-office', + 'explore.detail.contentAdvisory' => 'Recommandation d\'âge', + 'explore.detail.tags' => 'Tags', + 'explore.detail.revealSpoilerTags' => 'Afficher les tags spoiler', + 'explore.detail.links' => 'Liens', + 'explore.detail.watchOn' => 'Regarder sur', + 'explore.detail.watchTrailer' => 'Regarder la bande-annonce', + 'explore.detail.openOn' => ({required Object site}) => 'Ouvrir sur ${site}', + 'explore.detail.crew' => 'Équipe', + 'explore.detail.ratings' => 'Notes', + 'explore.detail.schedule' => 'Programme', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: 'Recommandé par ${n} utilisateur', other: 'Recommandé par ${n} utilisateurs', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Recommandé par ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Ajouté aux favoris par ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} pas encore diffusés', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Recommandé par ${percent} des spectateurs', + 'explore.detail.relatedTitles' => 'Titres liés', + 'explore.detail.background' => 'Contexte', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} résultat', other: '${n} résultats', ), 'liveTv.title' => 'TV en direct', 'liveTv.guide' => 'Guide', 'liveTv.noChannels' => 'Aucune chaîne disponible', @@ -3214,8 +3894,6 @@ extension on TranslationsFr { 'watchTogether.relayUnreachable' => 'Serveur relais inaccessible. Un blocage par le fournisseur d’accès peut empêcher le fonctionnement de Regarder ensemble.', 'watchTogether.reconnectingToHost' => 'Reconnexion à l\'hôte...', 'watchTogether.currentPlayback' => 'Lecture en cours', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Rejoindre la lecture en cours', 'watchTogether.joinCurrentPlaybackDescription' => 'Reprendre le contenu que l’hôte regarde actuellement', 'watchTogether.failedToOpenCurrentPlayback' => 'Impossible d\'ouvrir la lecture en cours', @@ -3284,9 +3962,15 @@ extension on TranslationsFr { 'downloads.editSyncRule' => 'Modifier la règle de synchronisation', 'downloads.removeSyncRule' => 'Supprimer la règle de synchronisation', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Arrêter la synchronisation de « ${title} » ? Les épisodes téléchargés seront conservés.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Arrêter la synchronisation de « ${title} » ?', + 'downloads.deleteSyncRuleDownloads' => 'Supprimer aussi les téléchargements associés', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Les téléchargements utilisés par une autre règle de synchronisation ou un autre profil seront conservés.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Règle de synchronisation créée — ${count} épisodes non vus conservés', 'downloads.syncRuleUpdated' => 'Règle de synchronisation mise à jour', 'downloads.syncRuleRemoved' => 'Règle de synchronisation supprimée', + 'downloads.syncRuleAndDownloadsRemoved' => 'Règle de synchronisation et téléchargements associés supprimés', + 'downloads.syncRuleCleanupBusy' => 'Les règles de synchronisation sont en cours de mise à jour. Réessayez dans un instant.', + 'downloads.syncRuleCleanupUnavailable' => 'Les téléchargements associés n\'ont pas pu être identifiés en toute sécurité. Reconnectez le serveur et réessayez, ou retirez la règle sans supprimer les téléchargements.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} nouveaux épisodes synchronisés pour ${title}', 'downloads.activeSyncRules' => 'Règles de synchronisation', 'downloads.noSyncRules' => 'Aucune règle de synchronisation', @@ -3449,6 +4133,8 @@ extension on TranslationsFr { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Moy. DV RPU', 'performanceOverlay.dvSampleAverage' => 'Moy. échant. DV', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Luma max.', 'performanceOverlay.minLuma' => 'Luma min.', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsFr { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Activer Plezy sur ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Rendez-vous sur ${url} et entrez ce code :', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Ouvrir ${service} pour activer', @@ -3641,9 +4328,12 @@ extension on TranslationsFr { 'services.libraryFilter.modeHintWhitelist' => 'Synchroniser uniquement les bibliothèques cochées ci-dessous.', 'services.libraryFilter.libraries' => 'Bibliothèques', 'services.libraryFilter.noLibraries' => 'Aucune bibliothèque disponible', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Ajouter un serveur ${product}', 'addServer.serverUrls' => 'URL du serveur', 'addServer.serverUrlsHelper' => 'Plusieurs URL possibles, séparées par des virgules.', 'addServer.findServer' => 'Rechercher un serveur', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Recherche de serveurs ${product} locaux...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Serveurs ${product} locaux', 'addServer.username' => 'Nom d\'utilisateur', 'addServer.password' => 'Mot de passe', 'addServer.signIn' => 'Se connecter', @@ -3655,11 +4345,15 @@ extension on TranslationsFr { 'addServer.addPlexTitle' => 'Se connecter avec Plex', 'addServer.pinExpired' => 'Le PIN a expiré avant la connexion. Veuillez réessayer.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Saisissez l\'URL de votre serveur ${product}', 'addServer.addConnectionTitle' => 'Ajouter une connexion', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Ajouter à ${name}', 'addServer.signInWithPlexCard' => 'Se connecter avec Plex', 'addServer.signInWithPlexCardSubtitle' => 'Autorisez cet appareil. Les serveurs partagés sont ajoutés.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Se connecter à ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Saisissez l\'URL de votre serveur, votre nom d\'utilisateur et votre mot de passe.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Connectez-vous à votre serveur ${product}. Sera associé à ${name}.', 'addServer.borrowFromAnotherProfile' => 'Emprunter à un autre profil', 'addServer.borrowFromAnotherProfileSubtitle' => 'Réutiliser la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.', _ => null, diff --git a/lib/i18n/strings_hu.g.dart b/lib/i18n/strings_hu.g.dart index a11fe303..2e0fcbf0 100644 --- a/lib/i18n/strings_hu.g.dart +++ b/lib/i18n/strings_hu.g.dart @@ -67,6 +67,7 @@ class TranslationsHu extends Translations with BaseTranslations 'Várakozás a hitelesítésre...\nJelentkezz be a böngésződben.'; @override String get useBrowser => 'Böngésző használata'; @override String get or => 'vagy'; + @override String connectToMediaBrowser({required Object product}) => 'Csatlakozás a(z) ${product} szolgáltatáshoz'; @override String get useQuickConnect => 'Quick Connect használata'; @override String get quickConnectInstructions => 'Nyisd meg a Quick Connect-et a Jellyfinben, és add meg ezt a kódot.'; @override String get quickConnectWaiting => 'Várakozás a jóváhagyásra…'; @@ -175,6 +177,7 @@ class _Translations$common$hu extends Translations$common$en { @override String get fullscreen => 'Teljes képernyő'; @override String get exitFullscreen => 'Kilépés a teljes képernyőből'; @override String get pressBackAgainToExit => 'A kilépéshez nyomd meg újra a Vissza gombot'; + @override late final _Translations$common$ratingSource$hu ratingSource = _Translations$common$ratingSource$hu._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$hu extends Translations$settings$en { @override String get darkTheme => 'Sötét'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Könyvtársűrűség'; + @override String get displayScale => 'Kijelző méretezése'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Kényelmes'; @override String get tvCornerSpotlightBackdrop => 'Sarokban megjelenő kiemelt háttérkép'; @@ -287,6 +291,11 @@ class _Translations$settings$hu extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => 'Automatikus (ajánlott)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} MB memória érhető el. A(z) ${size} MB méretű puffer befolyásolhatja a lejátszást.'; + @override String get playbackBuffer => 'Lejátszási puffer'; + @override String get playbackBufferAuto => 'Automatikus (ajánlott)'; + @override String get playbackBufferLarge => 'Nagy'; + @override String get playbackBufferExtraLarge => 'Extra nagy'; + @override String get playbackBufferDescription => 'Több puffert használ instabil kapcsolatok ellen. A pufferméret is korlátozza.'; @override String get defaultQualityTitle => 'Alapértelmezett minőség'; @override String get musicQualityTitle => 'Zene minősége'; @override String get subtitleStyling => 'Feliratok stílusa'; @@ -320,6 +329,9 @@ class _Translations$settings$hu extends Translations$settings$en { @override String get debugLoggingDescription => 'Részletes naplózás engedélyezése a hibaelhárításhoz'; @override String get viewLogs => 'Naplók megtekintése'; @override String get viewLogsDescription => 'Alkalmazásnaplók megtekintése'; + @override String get clearImageCache => 'Képgyorsítótár törlése'; + @override String get clearImageCacheDescription => 'Törli a gyorsítótárazott borítókat és miniatűröket. A képek lassabban tölthetők be, amíg újra le nem töltődnek.'; + @override String get clearImageCacheSuccess => 'A képgyorsítótár sikeresen törölve'; @override String get resetSettings => 'Beállítások visszaállítása'; @override String get resetSettingsDescription => 'Az alapértelmezett beállítások visszaállítása. Ez a művelet nem vonható vissza.'; @override String get resetSettingsSuccess => 'A beállítások sikeresen visszaállítva'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$hu extends Translations$fileInfo$en { // Translations @override String get title => 'Fájlinformáció'; + @override String get overview => 'Áttekintés'; @override String get video => 'Videó'; @override String get audio => 'Hang'; @override String get subtitles => 'Feliratok'; + @override String get images => 'Beágyazott képek'; + @override String get dataStreams => 'Adatfolyamok'; + @override String get lyrics => 'Dalszövegek'; @override String get file => 'Fájl'; + @override String get attachments => 'Mellékletek'; + @override String get delivery => 'Kézbesítés'; + @override String versionCounter({required Object index, required Object count}) => '${index}. verzió a(z) ${count} közül'; + @override String fileCounter({required Object index, required Object count}) => '${index}. fájl a(z) ${count} közül'; + @override String get noStreams => 'A szerver nem jelentett adatfolyamot ehhez a fájlhoz.'; + @override String get copyPath => 'Útvonal másolása'; + @override String get pathCopied => 'Fájlútvonal kimásolva'; @override String get codec => 'Kodek'; + @override String get codecTag => 'Kodekcímke'; @override String get resolution => 'Felbontás'; + @override String get codedResolution => 'Kódolt felbontás'; @override String get bitrate => 'Bitráta'; @override String get frameRate => 'Képkockasebesség'; + @override String get rotation => 'Forgatás'; + @override String get comment => 'Megjegyzés'; + @override String get audioDescription => 'Hangleírás'; + @override String get headerCompression => 'Fejléc-tömörítés'; + @override String get sidecarFile => 'Kísérő fájl'; + @override String get transportTimestamp => 'Szállítási időbélyeg'; + @override String get displayOffset => 'Megjelenítési eltolás'; + @override String get previewFailureCode => 'Előnézeti hibakód'; + @override String get previewRetries => 'Előnézeti újrapróbálkozások'; @override String get aspectRatio => 'Méretarány'; + @override String get pixelAspectRatio => 'Pixel képarány'; @override String get profile => 'Profil'; + @override String get level => 'Szint'; @override String get bitDepth => 'Bitmélység'; + @override String get pixelFormat => 'Pixelformátum'; @override String get colorSpace => 'Színtér'; @override String get colorRange => 'Színtartomány'; @override String get colorPrimaries => 'Elsődleges színek'; + @override String get colorTransfer => 'Színátvitel'; @override String get chromaSubsampling => 'Krominancia-alulmintavételezés'; + @override String get chromaLocation => 'Kroma elhelyezkedés'; + @override String get scanType => 'Pásztázási típus'; + @override String get interlaced => 'Váltott soros'; + @override String get anamorphic => 'Anamorf'; + @override String get referenceFrames => 'Referencia képkockák'; + @override String get dynamicRange => 'Dinamikatartomány'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision szint'; + @override String get dolbyVisionVersion => 'Dolby Vision verzió'; + @override String get dolbyVisionLayers => 'Dolby Vision rétegek'; + @override String get baseLayerCompatibility => 'Alapréteg-kompatibilitás'; + @override String get avcBitstream => 'AVC bitfolyam'; + @override String get nalLengthSize => 'NAL hosszméret'; + @override String get scalingMatrix => 'Egyéni méretezési mátrix'; + @override String get streamIdentifier => 'Adatfolyam-azonosító'; + @override String get streamIndex => 'Adatfolyam-index'; + @override String get streamId => 'Adatfolyam azonosítója'; + @override String get language => 'Nyelv'; + @override String get languageCode => 'Nyelvkód'; + @override String get streamTitle => 'Sáv címe'; @override String get channels => 'Csatornák'; + @override String get sampleRate => 'Mintavételi frekvencia'; + @override String get spatialAudio => 'Térbeli hang'; + @override String get textBased => 'Szövegalapú'; + @override String get subtitleFormat => 'Kísérő formátum'; + @override String get provider => 'Szolgáltató'; + @override String get matchScore => 'Egyezési pontszám'; + @override String get externalDelivery => 'Külön is kiszolgálható'; + @override String get sidecarPath => 'Kísérő fájl útvonala'; + @override String get sourceStream => 'Másolva innen'; + @override String get temporary => 'Ideiglenes'; + @override String get timeBase => 'Időalap'; @override String get overallBitrate => 'Összesített bitráta'; @override String get path => 'Elérési út'; + @override String get fileName => 'Fájlnév'; @override String get size => 'Méret'; + @override String get totalSize => 'Teljes méret'; @override String get container => 'Konténer'; @override String get duration => 'Időtartam'; + @override String get previewThumbnails => 'Előnézeti miniatűrök'; + @override String get previewIndex => 'Előnézeti index'; + @override String get packetLength => 'Csomaghossz'; + @override String get filePresent => 'Fájl jelen van'; + @override String get fileReadable => 'A szerver számára olvasható'; + @override String get streamPath => 'Adatfolyam útvonala'; @override String get optimizedForStreaming => 'Adatfolyam-továbbításra optimalizálva'; @override String get has64bitOffsets => '64 bites eltolások'; + @override String get protocol => 'Protokoll'; + @override String get mediaType => 'Médiatípus'; + @override String get sourceKind => 'Forrás típusa'; + @override String get optimizedVersion => 'Optimalizált verzió'; + @override String get optimizationTarget => 'Optimalizálási cél'; + @override String get deletedAt => 'Törölve'; + @override String get remoteSource => 'Távoli forrás'; + @override String get infiniteStream => 'Végtelen adatfolyam'; + @override String get directPlay => 'Közvetlen lejátszás'; + @override String get directStream => 'Közvetlen adatfolyam'; + @override String get transcoding => 'Átkódolás'; + @override String get etag => 'ETag'; + @override String get versionId => 'Verzióazonosító'; + @override String get fileId => 'Fájlazonosító'; + @override String get defaultAudioTrack => 'Alapértelmezett hangsáv'; + @override String get defaultSubtitleTrack => 'Alapértelmezett feliratsáv'; + @override String get subtitlesOff => 'Ki'; + @override String get flagDefault => 'Alapértelmezett'; + @override String get flagForced => 'Kényszerített'; + @override String get flagSelected => 'Kiválasztva'; + @override String get flagExternal => 'Külső'; + @override String get flagHearingImpaired => 'Nagyothallóknak'; + @override String get flagDub => 'Szinkron'; + @override String get flagOriginal => 'Eredeti'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$hu extends Translations$mediaMenu$en { @override String get shufflePlay => 'Véletlenszerű lejátszás'; @override String get shuffleNotAvailableOffline => 'A véletlenszerű lejátszás nem érhető el offline'; @override String get fileInfo => 'Fájlinformáció'; + @override String get deleteEpisodeFromServer => 'Epizód törlése a szerverről'; + @override String get deleteSeasonFromServer => 'Évad törlése a szerverről'; + @override String get deleteShowFromServer => 'Sorozat törlése a szerverről'; + @override String get deleteMovieFromServer => 'Film törlése a szerverről'; + @override String get deleteEpisodeTitle => 'Töröljük ezt az epizódot?'; + @override String get deleteSeasonTitle => 'Töröljük ezt az évadot?'; + @override String get deleteShowTitle => 'Töröljük ezt a sorozatot?'; + @override String get deleteMovieTitle => 'Töröljük ezt a filmet?'; + @override String get deleteEpisodeConfirm => 'Epizód törlése'; + @override String get deleteSeasonConfirm => 'Évad törlése'; + @override String get deleteShowConfirm => 'Sorozat törlése'; + @override String get deleteMovieConfirm => 'Film törlése'; + @override String get deleteAnyway => 'Törlés mindenképp'; + @override String confirmDeleteTarget({required Object title}) => 'Véglegesen töröljük a(z) ${title} elemet a szerverről?'; @override String get deleteMultipleWarning => 'Ez magában foglalja az összes epizódot és azok fájljait.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: 'Ez törli az összes (${n}) epizódot benne és a hozzá tartozó fájlt.', + other: 'Ez törli az összes (${n}) epizódot benne és a fájljaikat.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: 'Ez az elem ${n} fájlban van tárolva, amely törlésre kerül.', + other: 'Ez az elem ${n} fájlban van tárolva, és mindegyik törlésre kerül.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: 'További ${n} epizód is ugyanabban a fájlban van, és szintén törlésre kerül:', + other: 'További ${n} epizód is ugyanabban a fájlban van, és szintén törlésre kerül:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'A Plezy nem tudta ellenőrizni, mely fájlokat távolítja el ez, ezért a fent nevezett elemnél többet is törölhet. Szakítsa meg és próbálja újra, vagy töröljön mindenképp.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'A szerver nem szolgáltatott fájladatokat ehhez az elemhez, ezért a Plezy nem tudja ellenőrizni, mely fájlokat távolít el. A fent nevezett elemnél többet is törölhet.'; @override String get mediaDeletedSuccessfully => 'Médiaelem sikeresen törölve'; @override String get mediaFailedToDelete => 'Nem sikerült a médiaelem törlése'; @override String get rate => 'Értékelés'; @@ -657,6 +786,9 @@ class _Translations$videoControls$hu extends Translations$videoControls$en { @override String get playNext => 'Következő lejátszása'; @override String get playButton => 'Lejátszás'; @override String get pauseButton => 'Szünet'; + @override String get playbackPaused => 'Szüneteltetve'; + @override String get playbackResumed => 'Lejátszás'; + @override String get loadingVideo => 'Videó betöltése'; @override String get showPlaybackControls => 'Lejátszásvezérlők megjelenítése'; @override String get hidePlaybackControls => 'Lejátszásvezérlők elrejtése'; @override String seekBackwardButton({required Object seconds}) => 'Tekerés hátra ${seconds} másodperccel'; @@ -726,6 +858,7 @@ class _Translations$messages$hu extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Eltávolítva a folytatásból'; @override String errorLoading({required Object error}) => 'Hiba: ${error}'; + @override String get searchPartialResults => 'Néhány médiaszervert nem sikerült keresni. Az elérhető találatok megjelenítése.'; @override String get streamInterrupted => 'Az adatfolyam megszakadt. Az újrapróbálkozáshoz indítsd el a lejátszást, vagy tekerj másik pozícióra.'; @override String get liveStreamInterrupted => 'Az élő adás megszakadt. Nyomd meg a lejátszást az újrapróbálkozáshoz.'; @override String get fileInfoNotAvailable => 'A fájlinformáció nem érhető el'; @@ -764,6 +897,8 @@ class _Translations$messages$hu extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Váltás kompatibilis lejátszóra...'; @override String get serverLimitTitle => 'A lejátszás nem sikerült'; @override String get serverLimitBody => 'Szerverhiba (HTTP 500). A munkamenetet valószínűleg egy sávszélességi vagy átkódolási korlát utasította el. Kérd meg a tulajdonost a korlát módosítására.'; + @override String get mediaUnreadableTitle => 'A fájl nem érhető el'; + @override String get mediaUnreadableBody => 'A szerver megtalálta ezt az elemet, de nem tudta beolvasni a fájlját (HTTP 404). A fájl valószínűleg áthelyezésre vagy törlésre került, vagy a tárhelye offline. Kérje meg a szerver tulajdonosát, hogy ellenőrizze a fájlt, és vizsgálja újra a könyvtárat.'; @override String get logsUploaded => 'Naplók feltöltve'; @override String get logsUploadFailed => 'Nem sikerült a naplók feltöltése'; @override String get logId => 'Naplóazonosító'; @@ -917,6 +1052,8 @@ class _Translations$connections$hu extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'A(z) ${name} munkamenete lejárt'; @override String sessionExpiredMany({required Object count}) => '${count} szerver munkamenete lejárt'; @override String get signInAgain => 'Bejelentkezés újra'; + @override String editMediaBrowserTitle({required Object product}) => 'A(z) ${product} kapcsolat szerkesztése'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Adjon hozzá vagy távolítson el URL-eket a(z) ${serverName} esetén. A Plezy a legkisebb késleltetésű, elérhető URL-t fogja használni.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$hu extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Keresés sikertelen: ${error}'; + @override String get searchUnavailable => 'A keresés egyetlen médiaszervert sem tudott elérni.'; @override String connectionTimeout({required Object context}) => 'Hálózati időtúllépés a következő betöltésekor: ${context}'; @override String get connectionFailed => 'Nem sikerült csatlakozni a médiaszerverhez'; @override String unableToLoad({required Object context}) => 'Nem sikerült betölteni a következőt: ${context}. Próbáld újra.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$hu extends Translations$logs$en { @override String get uploadLogs => 'Naplók feltöltése'; } +// Path: startup +class _Translations$startup$hu extends Translations$startup$en { + _Translations$startup$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'A Plezy nem tudott elindulni'; + @override String get failedBody => 'Valami hiba történt az indítás során. Az alábbi részletek mutatják, mi hibázott.'; + @override String get failedBodyRepairable => 'A Plezy mentett beállításfájlja sérült, és újra kell építeni, mielőtt a Plezy elindulhatna. Az újrapróbálkozás nem segít – válassza a Tárhely javítása lehetőséget.'; + @override String get phaseLabel => 'Lépés'; + @override String get showDetails => 'Részletek megjelenítése'; + @override String get hideDetails => 'Részletek elrejtése'; + @override String get copyDetails => 'Részletek másolása'; + @override String get detailsCopied => 'A részletek a vágólapra kerültek'; + @override String get uploadDetails => 'Részletek feltöltése'; + @override String get repairStorage => 'Tárhely javítása'; + @override String get repairTitle => 'Javítsuk a tárolt adatokat?'; + @override String get repairBodyCommon => 'A Plezy beállításfájlja sérült, és nem olvasható. A javítás minden beállítást visszaállít az alapértelmezettre.'; + @override String get repairBodyOneCredential => 'Egy mentett bejelentkezés sérült, és nem olvasható. A javítás csak azt távolítja el; a többi beállítása érintetlen marad.'; + @override String get repairBodySignInsKept => 'A szervereinek és profiljainak bejelentkezve kell maradniuk.'; + @override String get repairBodySignInsLost => 'A mentett bejelentkezéseket védő kulcs nem nyerhető vissza ebből a fájlból, ezért minden szerverre és profilba újra be kell jelentkeznie. A médiaszerveren semmi nem érintett.'; + @override String get repairBodySessionsUncertain => 'A nyomkövetők (MAL, AniList, Simkl, Trakt) és a Seerr külön vannak tárolva, és megmaradhatnak vagy nem. A Plezy pontosan megmondja, mit őrzött meg.'; + @override String get repairConfirm => 'Javítás'; + @override String get repairSucceeded => 'A tárhely javítva'; + @override String get repairNeedsRestart => 'A tárhely javítva – újraindítás szükséges'; + @override String get restartRequiredBody => 'Az adatait kijavítottuk, de a Plezy-nek frissen kell elindulnia, mielőtt használhatná. Zárja be a Plezy-t, és nyissa meg újra.'; + @override String get quitPlezy => 'Kilépés a Plezy-ből'; + @override String get repairFailed => 'A javítás nem sikerült'; + @override String get repairKeptSignIns => 'A szerverei és profiljai továbbra is be vannak jelentkezve.'; + @override String get repairLostSignIns => 'A mentett bejelentkezéseket védő kulcs nem volt visszanyerhető. Minden szerverre és profilba újra be kell jelentkeznie.'; + @override String get repairLostSessions => 'Legalább egy nyomkövető- vagy Seerr-kapcsolat elveszett, és újra kell csatlakoztatni.'; + @override String get backupTitle => 'A sérült fájlról másolat készült'; + @override String get backupWarning => 'Bejelentkezési adatait tartalmazza. Ne töltse fel és ne ossza meg.'; + @override String get deleteBackup => 'Másolat törlése'; + @override String get backupDeleted => 'A másolat törölve.'; + @override String get previousFailureTitle => 'A Plezy legutóbb nem tudott elindulni'; +} + // Path: licenses class _Translations$licenses$hu extends Translations$licenses$en { _Translations$licenses$hu._(TranslationsHu root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$hu extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Nincs találat a következőre: "${query}"'; @override String searchPrompt({required Object source}) => 'Filmek és sorozatok keresése a következőn: ${source}.'; @override String get searchFailed => 'A keresés nem sikerült. Ellenőrizd a kapcsolatot és próbáld újra.'; + @override late final _Translations$explore$badge$hu badge = _Translations$explore$badge$hu._(_root); + @override late final _Translations$explore$stats$hu stats = _Translations$explore$stats$hu._(_root); + @override late final _Translations$explore$season$hu season = _Translations$explore$season$hu._(_root); + @override late final _Translations$explore$format$hu format = _Translations$explore$format$hu._(_root); + @override late final _Translations$explore$sourceMaterial$hu sourceMaterial = _Translations$explore$sourceMaterial$hu._(_root); + @override late final _Translations$explore$creditRole$hu creditRole = _Translations$explore$creditRole$hu._(_root); + @override late final _Translations$explore$relation$hu relation = _Translations$explore$relation$hu._(_root); + @override String broadcast({required Object day, required Object time}) => 'Adásban: ${day}, ${time} órakor'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Adásban: ${day}, ${time} ${timezone}'; + @override late final _Translations$explore$detail$hu detail = _Translations$explore$detail$hu._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: '${n} találat', + other: '${n} találat', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$hu extends Translations$downloads$en { @override String get editSyncRule => 'Szinkronizálási szabály szerkesztése'; @override String get removeSyncRule => 'Szinkronizálási szabály eltávolítása'; @override String removeSyncRuleConfirm({required Object title}) => 'Leállítod a(z) "${title}" szinkronizálását? A letöltött epizódok megmaradnak.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Leállítjuk a(z) "${title}" szinkronizálását?'; + @override String get deleteSyncRuleDownloads => 'A kapcsolódó letöltések törlése is'; + @override String get deleteSyncRuleDownloadsDescription => 'A másik szinkronszabály vagy profil által használt letöltések megmaradnak.'; @override String syncRuleCreated({required Object count}) => 'Szinkronizálási szabály létrehozva — ${count} nem látott epizód megtartása'; @override String get syncRuleUpdated => 'Szinkronizálási szabály frissítve'; @override String get syncRuleRemoved => 'Szinkronizálási szabály eltávolítva'; + @override String get syncRuleAndDownloadsRemoved => 'A szinkronszabály és a kapcsolódó letöltések eltávolítva'; + @override String get syncRuleCleanupBusy => 'A szinkronszabályok éppen frissülnek. Próbálja újra egy pillanat múlva.'; + @override String get syncRuleCleanupUnavailable => 'A kapcsolódó letöltések nem azonosíthatók biztonságosan. Csatlakoztassa újra a szervert, és próbálja újra, vagy távolítsa el a szabályt a letöltések törlése nélkül.'; @override String syncedNewEpisodes({required Object count, required Object title}) => '${count} új epizód szinkronizálva a következőhöz: ${title}'; @override String get activeSyncRules => 'Szinkronizálási szabályok'; @override String get noSyncRules => 'Nincsenek szinkronizálási szabályok'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$hu extends Translations$addServer$en { final TranslationsHu _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product} szerver hozzáadása'; @override String get serverUrls => 'Szerver URL-címei'; @override String get serverUrlsHelper => 'Több URL is megadható, vesszővel elválasztva.'; @override String get findServer => 'Szerver keresése'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Helyi ${product} szerverek keresése...'; + @override String localMediaBrowserServers({required Object product}) => 'Helyi ${product} szerverek'; @override String get username => 'Felhasználónév'; @override String get password => 'Jelszó'; @override String get signIn => 'Bejelentkezés'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$hu extends Translations$addServer$en { @override String get addPlexTitle => 'Bejelentkezés Plexszel'; @override String get pinExpired => 'A PIN-kód a bejelentkezés előtt lejárt. Próbáld újra.'; @override String failedToRegisterAccount({required Object error}) => 'Nem sikerült a fiók regisztrálása: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Adja meg a(z) ${product} szerver URL-jét'; @override String get addConnectionTitle => 'Kapcsolat hozzáadása'; @override String addConnectionTitleScoped({required Object name}) => 'Hozzáadás a következőhöz: ${name}'; @override String get signInWithPlexCard => 'Bejelentkezés Plexszel'; @override String get signInWithPlexCardSubtitle => 'Eszköz engedélyezése. A megosztott szerverek hozzáadásra kerülnek.'; @override String get signInWithPlexCardSubtitleScoped => 'Plex-fiók engedélyezése. A Plex Home-felhasználókból profilok lesznek.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Csatlakozás a(z) ${product} szolgáltatáshoz'; + @override String get connectToMediaBrowserCardSubtitle => 'Adja meg a szerver URL-jét, felhasználónevét és jelszavát.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Jelentkezzen be a(z) ${product} szerverére. A(z) ${name} szolgáltatáshoz kötődik.'; @override String get borrowFromAnotherProfile => 'Kapcsolat használata másik profilból'; @override String get borrowFromAnotherProfileSubtitle => 'Egy másik profil kapcsolatának használata. A PIN-kóddal védett profilokhoz PIN-kód szükséges.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$hu extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get critic => 'Kritikusok'; + @override String get audience => 'Közönség'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes kritikusok'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes közönség'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$hu extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$hu._(TranslationsHu root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$hu extends Translations$explore$status$en { @override String get upcoming => 'Közelgő'; } +// Path: explore.badge +class _Translations$explore$badge$hu extends Translations$explore$badge$en { + _Translations$explore$badge$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} népszerű'; + @override String rankAiring({required Object n}) => '#${n} adásban'; + @override String rankRated({required Object n}) => '#${n} értékelt'; + @override String rankFavorited({required Object n}) => '#${n} kedvenc'; + @override String rankTrending({required Object n}) => '#${n} felkapott'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} a(z) ${season} évadban'; + @override String watchingNow({required Object n}) => '${n} nézi'; + @override String get available => 'Elérhető'; + @override String get partiallyAvailable => 'Részben elérhető'; + @override String get availableIn4k => '4K elérhető'; + @override String get requested => 'Kérve'; + @override String get pendingApproval => 'Jóváhagyásra vár'; + @override String get processing => 'Feldolgozás alatt'; + @override String get declined => 'Elutasítva'; + @override String get requestFailed => 'A kérés nem sikerült'; + @override String get requested4k => '4K kérve'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} évad'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => '${episode}. ep. ${duration} múlva'; + @override String nextAiringIn({required Object duration}) => 'Következő ${duration} múlva'; + @override String episodesShort({required Object n}) => '${n} ep.'; + @override String minutesPerEpisode({required Object n}) => '${n} perc/ep.'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$hu extends Translations$explore$stats$en { + _Translations$explore$stats$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} listázva'; + @override String viewersDay({required Object n}) => '${n} nézte ma'; + @override String viewersWeek({required Object n}) => '${n} nézte ezen a héten'; + @override String viewersMonth({required Object n}) => '${n} nézte ebben a hónapban'; + @override String viewersYear({required Object n}) => '${n} nézte ebben az évben'; + @override String viewersAllTime({required Object n}) => '${n} néző'; + @override String planning({required Object n}) => '${n} tervezi megnézni'; + @override String favorited({required Object n}) => '${n} kedvenc'; + @override String dropRate({required Object percent}) => '${percent} felhagyott vele'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: '${n} hozzászólás', + other: '${n} hozzászólás', + ); + @override String votes({required Object n}) => '${n} szavazat'; + @override String watching({required Object n}) => '${n} nézi'; + @override String completed({required Object n}) => '${n} befejezte'; + @override String onHold({required Object n}) => '${n} szünetelteti'; + @override String dropped({required Object n}) => '${n} felhagyott vele'; +} + +// Path: explore.season +class _Translations$explore$season$hu extends Translations$explore$season$en { + _Translations$explore$season$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get winter => 'Tél'; + @override String get spring => 'Tavasz'; + @override String get summer => 'Nyár'; + @override String get fall => 'Ősz'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$hu extends Translations$explore$format$en { + _Translations$explore$format$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV rövid'; + @override String get movie => 'Film'; + @override String get special => 'Különkiadás'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Zene'; + @override String get other => 'Egyéb'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$hu extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get original => 'Eredeti'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Regény'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Játék'; + @override String get webComic => 'Webképregény'; + @override String get musicRelease => 'Zene'; + @override String get otherMedia => 'Egyéb'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$hu extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get director => 'Rendező'; + @override String get writer => 'Író'; + @override String get producer => 'Producer'; + @override String get creator => 'Alkotó'; + @override String get composer => 'Zeneszerző'; +} + +// Path: explore.relation +class _Translations$explore$relation$hu extends Translations$explore$relation$en { + _Translations$explore$relation$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Előzmény'; + @override String get sequel => 'Folytatás'; + @override String get sideStory => 'Melléktörténet'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternatív verzió'; + @override String get summary => 'Összefoglaló'; + @override String get parentStory => 'Fő történet'; + @override String get adaptation => 'Adaptáció'; + @override String get other => 'Kapcsolódó'; +} + +// Path: explore.detail +class _Translations$explore$detail$hu extends Translations$explore$detail$en { + _Translations$explore$detail$hu._(TranslationsHu root) : this._root = root, super.internal(root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Eredeti cím'; + @override String get alsoKnownAs => 'Más néven'; + @override String get studios => 'Stúdiók'; + @override String get country => 'Ország'; + @override String get language => 'Nyelv'; + @override String get released => 'Megjelent'; + @override String get physicalRelease => 'Lemezes'; + @override String get ended => 'Befejeződött'; + @override String addedOn({required Object date}) => 'Hozzáadva: ${date}'; + @override String get yourRating => 'Az Ön értékelése'; + @override String get budget => 'Költségvetés'; + @override String get revenue => 'Bevétel'; + @override String get contentAdvisory => 'Korhatár'; + @override String get tags => 'Címkék'; + @override String get revealSpoilerTags => 'Spoiler címkék megjelenítése'; + @override String get links => 'Hivatkozások'; + @override String get watchOn => 'Megnézhető itt'; + @override String get watchTrailer => 'Előzetes megtekintése'; + @override String openOn({required Object site}) => 'Megnyitás itt: ${site}'; + @override String get crew => 'Stáb'; + @override String get ratings => 'Értékelések'; + @override String get schedule => 'Műsorrend'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: '${n} felhasználó ajánlja', + other: '${n} felhasználó ajánlja', + ); + @override String recommendedBy({required Object who}) => 'Ajánlotta: ${who}'; + @override String favoritedBy({required Object who}) => 'Kedvencek közt: ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} még nem került adásba'; + @override String recommendedByPercent({required Object percent}) => 'A nézők ${percent}-a ajánlja'; + @override String get relatedTitles => 'Kapcsolódó címek'; + @override String get background => 'Háttér'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$hu extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$hu._(TranslationsHu root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$hu extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsHu { 'auth.waitingForAuth' => 'Várakozás a hitelesítésre...\nJelentkezz be a böngésződben.', 'auth.useBrowser' => 'Böngésző használata', 'auth.or' => 'vagy', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Csatlakozás a(z) ${product} szolgáltatáshoz', 'auth.useQuickConnect' => 'Quick Connect használata', 'auth.quickConnectInstructions' => 'Nyisd meg a Quick Connect-et a Jellyfinben, és add meg ezt a kódot.', 'auth.quickConnectWaiting' => 'Várakozás a jóváhagyásra…', @@ -2248,6 +2654,17 @@ extension on TranslationsHu { 'common.fullscreen' => 'Teljes képernyő', 'common.exitFullscreen' => 'Kilépés a teljes képernyőből', 'common.pressBackAgainToExit' => 'A kilépéshez nyomd meg újra a Vissza gombot', + 'common.ratingSource.critic' => 'Kritikusok', + 'common.ratingSource.audience' => 'Közönség', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes kritikusok', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes közönség', 'screens.licenses' => 'Licencek', 'screens.switchProfile' => 'Profilváltás', 'screens.subtitleStyling' => 'Feliratok stílusa', @@ -2284,6 +2701,7 @@ extension on TranslationsHu { 'settings.darkTheme' => 'Sötét', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Könyvtársűrűség', + 'settings.displayScale' => 'Kijelző méretezése', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Kényelmes', 'settings.tvCornerSpotlightBackdrop' => 'Sarokban megjelenő kiemelt háttérkép', @@ -2333,6 +2751,11 @@ extension on TranslationsHu { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => 'Automatikus (ajánlott)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} MB memória érhető el. A(z) ${size} MB méretű puffer befolyásolhatja a lejátszást.', + 'settings.playbackBuffer' => 'Lejátszási puffer', + 'settings.playbackBufferAuto' => 'Automatikus (ajánlott)', + 'settings.playbackBufferLarge' => 'Nagy', + 'settings.playbackBufferExtraLarge' => 'Extra nagy', + 'settings.playbackBufferDescription' => 'Több puffert használ instabil kapcsolatok ellen. A pufferméret is korlátozza.', 'settings.defaultQualityTitle' => 'Alapértelmezett minőség', 'settings.musicQualityTitle' => 'Zene minősége', 'settings.subtitleStyling' => 'Feliratok stílusa', @@ -2366,6 +2789,9 @@ extension on TranslationsHu { 'settings.debugLoggingDescription' => 'Részletes naplózás engedélyezése a hibaelhárításhoz', 'settings.viewLogs' => 'Naplók megtekintése', 'settings.viewLogsDescription' => 'Alkalmazásnaplók megtekintése', + 'settings.clearImageCache' => 'Képgyorsítótár törlése', + 'settings.clearImageCacheDescription' => 'Törli a gyorsítótárazott borítókat és miniatűröket. A képek lassabban tölthetők be, amíg újra le nem töltődnek.', + 'settings.clearImageCacheSuccess' => 'A képgyorsítótár sikeresen törölve', 'settings.resetSettings' => 'Beállítások visszaállítása', 'settings.resetSettingsDescription' => 'Az alapértelmezett beállítások visszaállítása. Ez a művelet nem vonható vissza.', 'settings.resetSettingsSuccess' => 'A beállítások sikeresen visszaállítva', @@ -2549,29 +2975,118 @@ extension on TranslationsHu { 'hotkeys.actions.skipMarker' => 'Intró/stáblista átugrása', 'hotkeys.actions.screenshot' => 'Képernyőkép készítése', 'fileInfo.title' => 'Fájlinformáció', + 'fileInfo.overview' => 'Áttekintés', 'fileInfo.video' => 'Videó', 'fileInfo.audio' => 'Hang', 'fileInfo.subtitles' => 'Feliratok', + 'fileInfo.images' => 'Beágyazott képek', + 'fileInfo.dataStreams' => 'Adatfolyamok', + 'fileInfo.lyrics' => 'Dalszövegek', 'fileInfo.file' => 'Fájl', + 'fileInfo.attachments' => 'Mellékletek', + 'fileInfo.delivery' => 'Kézbesítés', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => '${index}. verzió a(z) ${count} közül', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => '${index}. fájl a(z) ${count} közül', + 'fileInfo.noStreams' => 'A szerver nem jelentett adatfolyamot ehhez a fájlhoz.', + 'fileInfo.copyPath' => 'Útvonal másolása', + 'fileInfo.pathCopied' => 'Fájlútvonal kimásolva', 'fileInfo.codec' => 'Kodek', + 'fileInfo.codecTag' => 'Kodekcímke', 'fileInfo.resolution' => 'Felbontás', + 'fileInfo.codedResolution' => 'Kódolt felbontás', 'fileInfo.bitrate' => 'Bitráta', 'fileInfo.frameRate' => 'Képkockasebesség', + 'fileInfo.rotation' => 'Forgatás', + 'fileInfo.comment' => 'Megjegyzés', + 'fileInfo.audioDescription' => 'Hangleírás', + 'fileInfo.headerCompression' => 'Fejléc-tömörítés', + 'fileInfo.sidecarFile' => 'Kísérő fájl', + 'fileInfo.transportTimestamp' => 'Szállítási időbélyeg', + 'fileInfo.displayOffset' => 'Megjelenítési eltolás', + 'fileInfo.previewFailureCode' => 'Előnézeti hibakód', + 'fileInfo.previewRetries' => 'Előnézeti újrapróbálkozások', 'fileInfo.aspectRatio' => 'Méretarány', + 'fileInfo.pixelAspectRatio' => 'Pixel képarány', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Szint', 'fileInfo.bitDepth' => 'Bitmélység', + 'fileInfo.pixelFormat' => 'Pixelformátum', 'fileInfo.colorSpace' => 'Színtér', 'fileInfo.colorRange' => 'Színtartomány', 'fileInfo.colorPrimaries' => 'Elsődleges színek', + 'fileInfo.colorTransfer' => 'Színátvitel', 'fileInfo.chromaSubsampling' => 'Krominancia-alulmintavételezés', + 'fileInfo.chromaLocation' => 'Kroma elhelyezkedés', + 'fileInfo.scanType' => 'Pásztázási típus', + 'fileInfo.interlaced' => 'Váltott soros', + 'fileInfo.anamorphic' => 'Anamorf', + 'fileInfo.referenceFrames' => 'Referencia képkockák', + 'fileInfo.dynamicRange' => 'Dinamikatartomány', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision szint', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision verzió', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision rétegek', + 'fileInfo.baseLayerCompatibility' => 'Alapréteg-kompatibilitás', + 'fileInfo.avcBitstream' => 'AVC bitfolyam', + 'fileInfo.nalLengthSize' => 'NAL hosszméret', + 'fileInfo.scalingMatrix' => 'Egyéni méretezési mátrix', + 'fileInfo.streamIdentifier' => 'Adatfolyam-azonosító', + 'fileInfo.streamIndex' => 'Adatfolyam-index', + 'fileInfo.streamId' => 'Adatfolyam azonosítója', + 'fileInfo.language' => 'Nyelv', + 'fileInfo.languageCode' => 'Nyelvkód', + 'fileInfo.streamTitle' => 'Sáv címe', 'fileInfo.channels' => 'Csatornák', + 'fileInfo.sampleRate' => 'Mintavételi frekvencia', + 'fileInfo.spatialAudio' => 'Térbeli hang', + 'fileInfo.textBased' => 'Szövegalapú', + 'fileInfo.subtitleFormat' => 'Kísérő formátum', + 'fileInfo.provider' => 'Szolgáltató', + 'fileInfo.matchScore' => 'Egyezési pontszám', + 'fileInfo.externalDelivery' => 'Külön is kiszolgálható', + 'fileInfo.sidecarPath' => 'Kísérő fájl útvonala', + 'fileInfo.sourceStream' => 'Másolva innen', + 'fileInfo.temporary' => 'Ideiglenes', + 'fileInfo.timeBase' => 'Időalap', 'fileInfo.overallBitrate' => 'Összesített bitráta', 'fileInfo.path' => 'Elérési út', + 'fileInfo.fileName' => 'Fájlnév', 'fileInfo.size' => 'Méret', + 'fileInfo.totalSize' => 'Teljes méret', 'fileInfo.container' => 'Konténer', 'fileInfo.duration' => 'Időtartam', + 'fileInfo.previewThumbnails' => 'Előnézeti miniatűrök', + 'fileInfo.previewIndex' => 'Előnézeti index', + 'fileInfo.packetLength' => 'Csomaghossz', + 'fileInfo.filePresent' => 'Fájl jelen van', + 'fileInfo.fileReadable' => 'A szerver számára olvasható', + 'fileInfo.streamPath' => 'Adatfolyam útvonala', 'fileInfo.optimizedForStreaming' => 'Adatfolyam-továbbításra optimalizálva', 'fileInfo.has64bitOffsets' => '64 bites eltolások', + 'fileInfo.protocol' => 'Protokoll', + 'fileInfo.mediaType' => 'Médiatípus', + 'fileInfo.sourceKind' => 'Forrás típusa', + 'fileInfo.optimizedVersion' => 'Optimalizált verzió', + 'fileInfo.optimizationTarget' => 'Optimalizálási cél', + 'fileInfo.deletedAt' => 'Törölve', + 'fileInfo.remoteSource' => 'Távoli forrás', + 'fileInfo.infiniteStream' => 'Végtelen adatfolyam', + 'fileInfo.directPlay' => 'Közvetlen lejátszás', + 'fileInfo.directStream' => 'Közvetlen adatfolyam', + 'fileInfo.transcoding' => 'Átkódolás', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Verzióazonosító', + 'fileInfo.fileId' => 'Fájlazonosító', + 'fileInfo.defaultAudioTrack' => 'Alapértelmezett hangsáv', + 'fileInfo.defaultSubtitleTrack' => 'Alapértelmezett feliratsáv', + 'fileInfo.subtitlesOff' => 'Ki', + 'fileInfo.flagDefault' => 'Alapértelmezett', + 'fileInfo.flagForced' => 'Kényszerített', + 'fileInfo.flagSelected' => 'Kiválasztva', + 'fileInfo.flagExternal' => 'Külső', + 'fileInfo.flagHearingImpaired' => 'Nagyothallóknak', + 'fileInfo.flagDub' => 'Szinkron', + 'fileInfo.flagOriginal' => 'Eredeti', 'mediaMenu.markAsWatched' => 'Megjelölés megtekintettként', 'mediaMenu.markAsUnwatched' => 'Megjelölés nem megtekintettként', 'mediaMenu.removeFromContinueWatching' => 'Eltávolítás a folytatásból', @@ -2580,7 +3095,28 @@ extension on TranslationsHu { 'mediaMenu.shufflePlay' => 'Véletlenszerű lejátszás', 'mediaMenu.shuffleNotAvailableOffline' => 'A véletlenszerű lejátszás nem érhető el offline', 'mediaMenu.fileInfo' => 'Fájlinformáció', + 'mediaMenu.deleteEpisodeFromServer' => 'Epizód törlése a szerverről', + 'mediaMenu.deleteSeasonFromServer' => 'Évad törlése a szerverről', + 'mediaMenu.deleteShowFromServer' => 'Sorozat törlése a szerverről', + 'mediaMenu.deleteMovieFromServer' => 'Film törlése a szerverről', + 'mediaMenu.deleteEpisodeTitle' => 'Töröljük ezt az epizódot?', + 'mediaMenu.deleteSeasonTitle' => 'Töröljük ezt az évadot?', + 'mediaMenu.deleteShowTitle' => 'Töröljük ezt a sorozatot?', + 'mediaMenu.deleteMovieTitle' => 'Töröljük ezt a filmet?', + 'mediaMenu.deleteEpisodeConfirm' => 'Epizód törlése', + 'mediaMenu.deleteSeasonConfirm' => 'Évad törlése', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Sorozat törlése', + 'mediaMenu.deleteMovieConfirm' => 'Film törlése', + 'mediaMenu.deleteAnyway' => 'Törlés mindenképp', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Véglegesen töröljük a(z) ${title} elemet a szerverről?', 'mediaMenu.deleteMultipleWarning' => 'Ez magában foglalja az összes epizódot és azok fájljait.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, one: 'Ez törli az összes (${n}) epizódot benne és a hozzá tartozó fájlt.', other: 'Ez törli az összes (${n}) epizódot benne és a fájljaikat.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, one: 'Ez az elem ${n} fájlban van tárolva, amely törlésre kerül.', other: 'Ez az elem ${n} fájlban van tárolva, és mindegyik törlésre kerül.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, one: 'További ${n} epizód is ugyanabban a fájlban van, és szintén törlésre kerül:', other: 'További ${n} epizód is ugyanabban a fájlban van, és szintén törlésre kerül:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'A Plezy nem tudta ellenőrizni, mely fájlokat távolítja el ez, ezért a fent nevezett elemnél többet is törölhet. Szakítsa meg és próbálja újra, vagy töröljön mindenképp.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'A szerver nem szolgáltatott fájladatokat ehhez az elemhez, ezért a Plezy nem tudja ellenőrizni, mely fájlokat távolít el. A fent nevezett elemnél többet is törölhet.', 'mediaMenu.mediaDeletedSuccessfully' => 'Médiaelem sikeresen törölve', 'mediaMenu.mediaFailedToDelete' => 'Nem sikerült a médiaelem törlése', 'mediaMenu.rate' => 'Értékelés', @@ -2646,6 +3182,9 @@ extension on TranslationsHu { 'videoControls.playNext' => 'Következő lejátszása', 'videoControls.playButton' => 'Lejátszás', 'videoControls.pauseButton' => 'Szünet', + 'videoControls.playbackPaused' => 'Szüneteltetve', + 'videoControls.playbackResumed' => 'Lejátszás', + 'videoControls.loadingVideo' => 'Videó betöltése', 'videoControls.showPlaybackControls' => 'Lejátszásvezérlők megjelenítése', 'videoControls.hidePlaybackControls' => 'Lejátszásvezérlők elrejtése', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Tekerés hátra ${seconds} másodperccel', @@ -2700,8 +3239,6 @@ extension on TranslationsHu { 'videoControls.subtitleDownloaded' => 'Felirat letöltve', 'videoControls.subtitleDownloadedNotApplied' => 'Felirat letöltve, de nem sikerült kiválasztani', 'videoControls.subtitleDownloadFailed' => 'Nem sikerült a felirat letöltése', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Nyelvek keresése...', 'messages.markedAsWatched' => 'Megjelölve megtekintettként', 'messages.markedAsUnwatched' => 'Megjelölve nem megtekintettként', @@ -2711,6 +3248,7 @@ extension on TranslationsHu { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, one: '${n} megtekintett letöltés automatikusan eltávolítva', other: '${n} megtekintett letöltés automatikusan eltávolítva', ), 'messages.removedFromContinueWatching' => 'Eltávolítva a folytatásból', 'messages.errorLoading' => ({required Object error}) => 'Hiba: ${error}', + 'messages.searchPartialResults' => 'Néhány médiaszervert nem sikerült keresni. Az elérhető találatok megjelenítése.', 'messages.streamInterrupted' => 'Az adatfolyam megszakadt. Az újrapróbálkozáshoz indítsd el a lejátszást, vagy tekerj másik pozícióra.', 'messages.liveStreamInterrupted' => 'Az élő adás megszakadt. Nyomd meg a lejátszást az újrapróbálkozáshoz.', 'messages.fileInfoNotAvailable' => 'A fájlinformáció nem érhető el', @@ -2749,6 +3287,8 @@ extension on TranslationsHu { 'messages.switchingToCompatiblePlayer' => 'Váltás kompatibilis lejátszóra...', 'messages.serverLimitTitle' => 'A lejátszás nem sikerült', 'messages.serverLimitBody' => 'Szerverhiba (HTTP 500). A munkamenetet valószínűleg egy sávszélességi vagy átkódolási korlát utasította el. Kérd meg a tulajdonost a korlát módosítására.', + 'messages.mediaUnreadableTitle' => 'A fájl nem érhető el', + 'messages.mediaUnreadableBody' => 'A szerver megtalálta ezt az elemet, de nem tudta beolvasni a fájlját (HTTP 404). A fájl valószínűleg áthelyezésre vagy törlésre került, vagy a tárhelye offline. Kérje meg a szerver tulajdonosát, hogy ellenőrizze a fájlt, és vizsgálja újra a könyvtárat.', 'messages.logsUploaded' => 'Naplók feltöltve', 'messages.logsUploadFailed' => 'Nem sikerült a naplók feltöltése', 'messages.logId' => 'Naplóazonosító', @@ -2857,6 +3397,8 @@ extension on TranslationsHu { 'connections.sessionExpiredOne' => ({required Object name}) => 'A(z) ${name} munkamenete lejárt', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} szerver munkamenete lejárt', 'connections.signInAgain' => 'Bejelentkezés újra', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'A(z) ${product} kapcsolat szerkesztése', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Adjon hozzá vagy távolítson el URL-eket a(z) ${serverName} esetén. A Plezy a legkisebb késleltetésű, elérhető URL-t fogja használni.', 'discover.title' => 'Felfedezés', 'discover.noContentAvailable' => 'Nincs elérhető tartalom', 'discover.addMediaToLibraries' => 'Adj hozzá médiát a könyvtáraidhoz', @@ -2882,6 +3424,7 @@ extension on TranslationsHu { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} perc van hátra', 'discover.moreLikeThis' => 'Hasonló tartalmak', 'errors.searchFailed' => ({required Object error}) => 'Keresés sikertelen: ${error}', + 'errors.searchUnavailable' => 'A keresés egyetlen médiaszervert sem tudott elérni.', 'errors.connectionTimeout' => ({required Object context}) => 'Hálózati időtúllépés a következő betöltésekor: ${context}', 'errors.connectionFailed' => 'Nem sikerült csatlakozni a médiaszerverhez', 'errors.unableToLoad' => ({required Object context}) => 'Nem sikerült betölteni a következőt: ${context}. Próbáld újra.', @@ -2989,6 +3532,36 @@ extension on TranslationsHu { 'logs.clearLogs' => 'Naplók törlése', 'logs.copyLogs' => 'Naplók másolása', 'logs.uploadLogs' => 'Naplók feltöltése', + 'startup.failedTitle' => 'A Plezy nem tudott elindulni', + 'startup.failedBody' => 'Valami hiba történt az indítás során. Az alábbi részletek mutatják, mi hibázott.', + 'startup.failedBodyRepairable' => 'A Plezy mentett beállításfájlja sérült, és újra kell építeni, mielőtt a Plezy elindulhatna. Az újrapróbálkozás nem segít – válassza a Tárhely javítása lehetőséget.', + 'startup.phaseLabel' => 'Lépés', + 'startup.showDetails' => 'Részletek megjelenítése', + 'startup.hideDetails' => 'Részletek elrejtése', + 'startup.copyDetails' => 'Részletek másolása', + 'startup.detailsCopied' => 'A részletek a vágólapra kerültek', + 'startup.uploadDetails' => 'Részletek feltöltése', + 'startup.repairStorage' => 'Tárhely javítása', + 'startup.repairTitle' => 'Javítsuk a tárolt adatokat?', + 'startup.repairBodyCommon' => 'A Plezy beállításfájlja sérült, és nem olvasható. A javítás minden beállítást visszaállít az alapértelmezettre.', + 'startup.repairBodyOneCredential' => 'Egy mentett bejelentkezés sérült, és nem olvasható. A javítás csak azt távolítja el; a többi beállítása érintetlen marad.', + 'startup.repairBodySignInsKept' => 'A szervereinek és profiljainak bejelentkezve kell maradniuk.', + 'startup.repairBodySignInsLost' => 'A mentett bejelentkezéseket védő kulcs nem nyerhető vissza ebből a fájlból, ezért minden szerverre és profilba újra be kell jelentkeznie. A médiaszerveren semmi nem érintett.', + 'startup.repairBodySessionsUncertain' => 'A nyomkövetők (MAL, AniList, Simkl, Trakt) és a Seerr külön vannak tárolva, és megmaradhatnak vagy nem. A Plezy pontosan megmondja, mit őrzött meg.', + 'startup.repairConfirm' => 'Javítás', + 'startup.repairSucceeded' => 'A tárhely javítva', + 'startup.repairNeedsRestart' => 'A tárhely javítva – újraindítás szükséges', + 'startup.restartRequiredBody' => 'Az adatait kijavítottuk, de a Plezy-nek frissen kell elindulnia, mielőtt használhatná. Zárja be a Plezy-t, és nyissa meg újra.', + 'startup.quitPlezy' => 'Kilépés a Plezy-ből', + 'startup.repairFailed' => 'A javítás nem sikerült', + 'startup.repairKeptSignIns' => 'A szerverei és profiljai továbbra is be vannak jelentkezve.', + 'startup.repairLostSignIns' => 'A mentett bejelentkezéseket védő kulcs nem volt visszanyerhető. Minden szerverre és profilba újra be kell jelentkeznie.', + 'startup.repairLostSessions' => 'Legalább egy nyomkövető- vagy Seerr-kapcsolat elveszett, és újra kell csatlakoztatni.', + 'startup.backupTitle' => 'A sérült fájlról másolat készült', + 'startup.backupWarning' => 'Bejelentkezési adatait tartalmazza. Ne töltse fel és ne ossza meg.', + 'startup.deleteBackup' => 'Másolat törlése', + 'startup.backupDeleted' => 'A másolat törölve.', + 'startup.previousFailureTitle' => 'A Plezy legutóbb nem tudott elindulni', 'licenses.relatedPackages' => 'Kapcsolódó csomagok', 'licenses.license' => 'Licenc', 'licenses.licenseNumber' => ({required Object number}) => '${number}. licenc', @@ -3032,6 +3605,113 @@ extension on TranslationsHu { 'explore.searchEmpty' => ({required Object query}) => 'Nincs találat a következőre: "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Filmek és sorozatok keresése a következőn: ${source}.', 'explore.searchFailed' => 'A keresés nem sikerült. Ellenőrizd a kapcsolatot és próbáld újra.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} népszerű', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} adásban', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} értékelt', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} kedvenc', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} felkapott', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} a(z) ${season} évadban', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} nézi', + 'explore.badge.available' => 'Elérhető', + 'explore.badge.partiallyAvailable' => 'Részben elérhető', + 'explore.badge.availableIn4k' => '4K elérhető', + 'explore.badge.requested' => 'Kérve', + 'explore.badge.pendingApproval' => 'Jóváhagyásra vár', + 'explore.badge.processing' => 'Feldolgozás alatt', + 'explore.badge.declined' => 'Elutasítva', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'A kérés nem sikerült', + 'explore.badge.requested4k' => '4K kérve', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} évad', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => '${episode}. ep. ${duration} múlva', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Következő ${duration} múlva', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} ep.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} perc/ep.', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} listázva', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} nézte ma', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} nézte ezen a héten', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} nézte ebben a hónapban', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} nézte ebben az évben', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} néző', + 'explore.stats.planning' => ({required Object n}) => '${n} tervezi megnézni', + 'explore.stats.favorited' => ({required Object n}) => '${n} kedvenc', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} felhagyott vele', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, one: '${n} hozzászólás', other: '${n} hozzászólás', ), + 'explore.stats.votes' => ({required Object n}) => '${n} szavazat', + 'explore.stats.watching' => ({required Object n}) => '${n} nézi', + 'explore.stats.completed' => ({required Object n}) => '${n} befejezte', + 'explore.stats.onHold' => ({required Object n}) => '${n} szünetelteti', + 'explore.stats.dropped' => ({required Object n}) => '${n} felhagyott vele', + 'explore.season.winter' => 'Tél', + 'explore.season.spring' => 'Tavasz', + 'explore.season.summer' => 'Nyár', + 'explore.season.fall' => 'Ősz', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV rövid', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Különkiadás', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Zene', + 'explore.format.other' => 'Egyéb', + 'explore.sourceMaterial.original' => 'Eredeti', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Regény', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Játék', + 'explore.sourceMaterial.webComic' => 'Webképregény', + 'explore.sourceMaterial.musicRelease' => 'Zene', + 'explore.sourceMaterial.otherMedia' => 'Egyéb', + 'explore.creditRole.director' => 'Rendező', + 'explore.creditRole.writer' => 'Író', + 'explore.creditRole.producer' => 'Producer', + 'explore.creditRole.creator' => 'Alkotó', + 'explore.creditRole.composer' => 'Zeneszerző', + 'explore.relation.prequel' => 'Előzmény', + 'explore.relation.sequel' => 'Folytatás', + 'explore.relation.sideStory' => 'Melléktörténet', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternatív verzió', + 'explore.relation.summary' => 'Összefoglaló', + 'explore.relation.parentStory' => 'Fő történet', + 'explore.relation.adaptation' => 'Adaptáció', + 'explore.relation.other' => 'Kapcsolódó', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Adásban: ${day}, ${time} órakor', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Adásban: ${day}, ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Eredeti cím', + 'explore.detail.alsoKnownAs' => 'Más néven', + 'explore.detail.studios' => 'Stúdiók', + 'explore.detail.country' => 'Ország', + 'explore.detail.language' => 'Nyelv', + 'explore.detail.released' => 'Megjelent', + 'explore.detail.physicalRelease' => 'Lemezes', + 'explore.detail.ended' => 'Befejeződött', + 'explore.detail.addedOn' => ({required Object date}) => 'Hozzáadva: ${date}', + 'explore.detail.yourRating' => 'Az Ön értékelése', + 'explore.detail.budget' => 'Költségvetés', + 'explore.detail.revenue' => 'Bevétel', + 'explore.detail.contentAdvisory' => 'Korhatár', + 'explore.detail.tags' => 'Címkék', + 'explore.detail.revealSpoilerTags' => 'Spoiler címkék megjelenítése', + 'explore.detail.links' => 'Hivatkozások', + 'explore.detail.watchOn' => 'Megnézhető itt', + 'explore.detail.watchTrailer' => 'Előzetes megtekintése', + 'explore.detail.openOn' => ({required Object site}) => 'Megnyitás itt: ${site}', + 'explore.detail.crew' => 'Stáb', + 'explore.detail.ratings' => 'Értékelések', + 'explore.detail.schedule' => 'Műsorrend', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, one: '${n} felhasználó ajánlja', other: '${n} felhasználó ajánlja', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Ajánlotta: ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Kedvencek közt: ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} még nem került adásba', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'A nézők ${percent}-a ajánlja', + 'explore.detail.relatedTitles' => 'Kapcsolódó címek', + 'explore.detail.background' => 'Háttér', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, one: '${n} találat', other: '${n} találat', ), 'liveTv.title' => 'Élő TV', 'liveTv.guide' => 'Műsorújság', 'liveTv.noChannels' => 'Nincsenek elérhető csatornák', @@ -3214,8 +3894,6 @@ extension on TranslationsHu { 'watchTogether.relayUnreachable' => 'A relészerver nem érhető el. Az internetszolgáltató blokkolása megakadályozhatja a közös nézést.', 'watchTogether.reconnectingToHost' => 'Újracsatlakozás a házigazdához...', 'watchTogether.currentPlayback' => 'Jelenlegi lejátszás', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Csatlakozás a jelenlegi lejátszáshoz', 'watchTogether.joinCurrentPlaybackDescription' => 'Visszatérés ahhoz, amit a házigazda éppen néz', 'watchTogether.failedToOpenCurrentPlayback' => 'Nem sikerült megnyitni a jelenlegi lejátszást', @@ -3284,9 +3962,15 @@ extension on TranslationsHu { 'downloads.editSyncRule' => 'Szinkronizálási szabály szerkesztése', 'downloads.removeSyncRule' => 'Szinkronizálási szabály eltávolítása', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Leállítod a(z) "${title}" szinkronizálását? A letöltött epizódok megmaradnak.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Leállítjuk a(z) "${title}" szinkronizálását?', + 'downloads.deleteSyncRuleDownloads' => 'A kapcsolódó letöltések törlése is', + 'downloads.deleteSyncRuleDownloadsDescription' => 'A másik szinkronszabály vagy profil által használt letöltések megmaradnak.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Szinkronizálási szabály létrehozva — ${count} nem látott epizód megtartása', 'downloads.syncRuleUpdated' => 'Szinkronizálási szabály frissítve', 'downloads.syncRuleRemoved' => 'Szinkronizálási szabály eltávolítva', + 'downloads.syncRuleAndDownloadsRemoved' => 'A szinkronszabály és a kapcsolódó letöltések eltávolítva', + 'downloads.syncRuleCleanupBusy' => 'A szinkronszabályok éppen frissülnek. Próbálja újra egy pillanat múlva.', + 'downloads.syncRuleCleanupUnavailable' => 'A kapcsolódó letöltések nem azonosíthatók biztonságosan. Csatlakoztassa újra a szervert, és próbálja újra, vagy távolítsa el a szabályt a letöltések törlése nélkül.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} új epizód szinkronizálva a következőhöz: ${title}', 'downloads.activeSyncRules' => 'Szinkronizálási szabályok', 'downloads.noSyncRules' => 'Nincsenek szinkronizálási szabályok', @@ -3449,6 +4133,8 @@ extension on TranslationsHu { 'performanceOverlay.dvRpus' => 'DV RPU-k', 'performanceOverlay.dvRpuAverage' => 'DV RPU-átlag', 'performanceOverlay.dvSampleAverage' => 'DV-mintaátlag', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Maximális luma', 'performanceOverlay.minLuma' => 'Minimális luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsHu { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Plezy aktiválása a következőn: ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Nyisd meg a(z) ${url} oldalt és add meg ezt a kódot:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Nyisd meg a(z) ${service} oldalt az aktiváláshoz', @@ -3641,9 +4328,12 @@ extension on TranslationsHu { 'services.libraryFilter.modeHintWhitelist' => 'Csak az alább bejelölt könyvtárak szinkronizálása.', 'services.libraryFilter.libraries' => 'Könyvtárak', 'services.libraryFilter.noLibraries' => 'Nincsenek elérhető könyvtárak', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product} szerver hozzáadása', 'addServer.serverUrls' => 'Szerver URL-címei', 'addServer.serverUrlsHelper' => 'Több URL is megadható, vesszővel elválasztva.', 'addServer.findServer' => 'Szerver keresése', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Helyi ${product} szerverek keresése...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Helyi ${product} szerverek', 'addServer.username' => 'Felhasználónév', 'addServer.password' => 'Jelszó', 'addServer.signIn' => 'Bejelentkezés', @@ -3655,11 +4345,15 @@ extension on TranslationsHu { 'addServer.addPlexTitle' => 'Bejelentkezés Plexszel', 'addServer.pinExpired' => 'A PIN-kód a bejelentkezés előtt lejárt. Próbáld újra.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Nem sikerült a fiók regisztrálása: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Adja meg a(z) ${product} szerver URL-jét', 'addServer.addConnectionTitle' => 'Kapcsolat hozzáadása', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Hozzáadás a következőhöz: ${name}', 'addServer.signInWithPlexCard' => 'Bejelentkezés Plexszel', 'addServer.signInWithPlexCardSubtitle' => 'Eszköz engedélyezése. A megosztott szerverek hozzáadásra kerülnek.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Plex-fiók engedélyezése. A Plex Home-felhasználókból profilok lesznek.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Csatlakozás a(z) ${product} szolgáltatáshoz', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Adja meg a szerver URL-jét, felhasználónevét és jelszavát.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Jelentkezzen be a(z) ${product} szerverére. A(z) ${name} szolgáltatáshoz kötődik.', 'addServer.borrowFromAnotherProfile' => 'Kapcsolat használata másik profilból', 'addServer.borrowFromAnotherProfileSubtitle' => 'Egy másik profil kapcsolatának használata. A PIN-kóddal védett profilokhoz PIN-kód szükséges.', _ => null, diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index a0db769f..08d24161 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -67,6 +67,7 @@ class TranslationsIt extends Translations with BaseTranslations 'In attesa di autenticazione...\nAccedi dal browser.'; @override String get useBrowser => 'Usa il browser'; @override String get or => 'o'; + @override String connectToMediaBrowser({required Object product}) => 'Connettiti a ${product}'; @override String get useQuickConnect => 'Usa Quick Connect'; @override String get quickConnectInstructions => 'Apri Quick Connect in Jellyfin e inserisci questo codice.'; @override String get quickConnectWaiting => 'In attesa di approvazione…'; @@ -175,6 +177,7 @@ class _Translations$common$it extends Translations$common$en { @override String get fullscreen => 'Schermo intero'; @override String get exitFullscreen => 'Esci dalla modalità a schermo intero'; @override String get pressBackAgainToExit => 'Premi di nuovo Indietro per uscire'; + @override late final _Translations$common$ratingSource$it ratingSource = _Translations$common$ratingSource$it._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$it extends Translations$settings$en { @override String get darkTheme => 'Scuro'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Densità della libreria'; + @override String get displayScale => 'Scala di visualizzazione'; @override String get compact => 'Compatta'; @override String get comfortable => 'Comoda'; @override String get tvCornerSpotlightBackdrop => 'Sfondo in evidenza nell\'angolo'; @@ -287,6 +291,11 @@ class _Translations$settings$it extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => 'Automatica (consigliata)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB di memoria disponibile. Un buffer di ${size}MB può influire sulla riproduzione.'; + @override String get playbackBuffer => 'Buffer di riproduzione'; + @override String get playbackBufferAuto => 'Auto (consigliato)'; + @override String get playbackBufferLarge => 'Grande'; + @override String get playbackBufferExtraLarge => 'Extra grande'; + @override String get playbackBufferDescription => 'Bufferizza di più contro connessioni instabili. Limitato anche dalla dimensione del buffer.'; @override String get defaultQualityTitle => 'Qualità predefinita'; @override String get musicQualityTitle => 'Qualità musicale'; @override String get subtitleStyling => 'Stile sottotitoli'; @@ -320,6 +329,9 @@ class _Translations$settings$it extends Translations$settings$en { @override String get debugLoggingDescription => 'Abilita una registrazione dettagliata per la risoluzione dei problemi'; @override String get viewLogs => 'Visualizza i log'; @override String get viewLogsDescription => 'Visualizza i log dell\'applicazione'; + @override String get clearImageCache => 'Svuota cache immagini'; + @override String get clearImageCacheDescription => 'Svuota le immagini e le miniature memorizzate nella cache. Le immagini potrebbero caricarsi più lentamente finché non vengono scaricate di nuovo.'; + @override String get clearImageCacheSuccess => 'Cache immagini svuotata correttamente'; @override String get resetSettings => 'Ripristina impostazioni'; @override String get resetSettingsDescription => 'Ripristina le impostazioni predefinite. Questa operazione non può essere annullata.'; @override String get resetSettingsSuccess => 'Impostazioni ripristinate correttamente'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$it extends Translations$fileInfo$en { // Translations @override String get title => 'Info sul file'; + @override String get overview => 'Panoramica'; @override String get video => 'Video'; @override String get audio => 'Audio'; @override String get subtitles => 'Sottotitoli'; + @override String get images => 'Immagini incorporate'; + @override String get dataStreams => 'Flussi di dati'; + @override String get lyrics => 'Testi'; @override String get file => 'File'; + @override String get attachments => 'Allegati'; + @override String get delivery => 'Distribuzione'; + @override String versionCounter({required Object index, required Object count}) => 'Versione ${index} di ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'File ${index} di ${count}'; + @override String get noStreams => 'Il server non ha segnalato flussi per questo file.'; + @override String get copyPath => 'Copia percorso'; + @override String get pathCopied => 'Percorso del file copiato'; @override String get codec => 'Codec'; + @override String get codecTag => 'Tag codec'; @override String get resolution => 'Risoluzione'; + @override String get codedResolution => 'Risoluzione codificata'; @override String get bitrate => 'Bitrate'; @override String get frameRate => 'Frequenza fotogrammi'; + @override String get rotation => 'Rotazione'; + @override String get comment => 'Commento'; + @override String get audioDescription => 'Descrizione audio'; + @override String get headerCompression => 'Compressione header'; + @override String get sidecarFile => 'File sidecar'; + @override String get transportTimestamp => 'Timestamp di trasporto'; + @override String get displayOffset => 'Offset di visualizzazione'; + @override String get previewFailureCode => 'Codice errore anteprima'; + @override String get previewRetries => 'Riprova anteprima'; @override String get aspectRatio => 'Proporzioni'; + @override String get pixelAspectRatio => 'Aspect ratio pixel'; @override String get profile => 'Profilo'; + @override String get level => 'Livello'; @override String get bitDepth => 'Profondità in bit'; + @override String get pixelFormat => 'Formato pixel'; @override String get colorSpace => 'Spazio colore'; @override String get colorRange => 'Gamma colori'; @override String get colorPrimaries => 'Colori primari'; + @override String get colorTransfer => 'Trasferimento colore'; @override String get chromaSubsampling => 'Sottocampionamento cromatico'; + @override String get chromaLocation => 'Posizione crominanza'; + @override String get scanType => 'Tipo di scansione'; + @override String get interlaced => 'Interlacciato'; + @override String get anamorphic => 'Anamorfico'; + @override String get referenceFrames => 'Frame di riferimento'; + @override String get dynamicRange => 'Dynamic Range'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision Level'; + @override String get dolbyVisionVersion => 'Dolby Vision Version'; + @override String get dolbyVisionLayers => 'Dolby Vision Layers'; + @override String get baseLayerCompatibility => 'Compatibilità layer di base'; + @override String get avcBitstream => 'Bitstream AVC'; + @override String get nalLengthSize => 'Dimensione lunghezza NAL'; + @override String get scalingMatrix => 'Matrice di scaling personalizzata'; + @override String get streamIdentifier => 'Identificatore flusso'; + @override String get streamIndex => 'Indice flusso'; + @override String get streamId => 'ID flusso'; + @override String get language => 'Lingua'; + @override String get languageCode => 'Codice lingua'; + @override String get streamTitle => 'Titolo traccia'; @override String get channels => 'Canali'; + @override String get sampleRate => 'Frequenza di campionamento'; + @override String get spatialAudio => 'Audio spaziale'; + @override String get textBased => 'Testuale'; + @override String get subtitleFormat => 'Formato sidecar'; + @override String get provider => 'Provider'; + @override String get matchScore => 'Punteggio corrispondenza'; + @override String get externalDelivery => 'Può essere servito separatamente'; + @override String get sidecarPath => 'Percorso sidecar'; + @override String get sourceStream => 'Copiato da'; + @override String get temporary => 'Temporaneo'; + @override String get timeBase => 'Base temporale'; @override String get overallBitrate => 'Bitrate complessivo'; @override String get path => 'Percorso'; + @override String get fileName => 'Nome file'; @override String get size => 'Dimensione'; + @override String get totalSize => 'Dimensione totale'; @override String get container => 'Contenitore'; @override String get duration => 'Durata'; + @override String get previewThumbnails => 'Miniature anteprima'; + @override String get previewIndex => 'Indice anteprima'; + @override String get packetLength => 'Lunghezza pacchetto'; + @override String get filePresent => 'File presente'; + @override String get fileReadable => 'Leggibile dal server'; + @override String get streamPath => 'Percorso flusso'; @override String get optimizedForStreaming => 'Ottimizzato per lo streaming'; @override String get has64bitOffsets => 'Offset a 64 bit'; + @override String get protocol => 'Protocollo'; + @override String get mediaType => 'Tipo di supporto'; + @override String get sourceKind => 'Tipo di origine'; + @override String get optimizedVersion => 'Versione ottimizzata'; + @override String get optimizationTarget => 'Obiettivo ottimizzazione'; + @override String get deletedAt => 'Eliminato'; + @override String get remoteSource => 'Origine remota'; + @override String get infiniteStream => 'Flusso infinito'; + @override String get directPlay => 'Riproduzione diretta'; + @override String get directStream => 'Streaming diretto'; + @override String get transcoding => 'Transcodifica'; + @override String get etag => 'ETag'; + @override String get versionId => 'ID versione'; + @override String get fileId => 'ID file'; + @override String get defaultAudioTrack => 'Traccia audio predefinita'; + @override String get defaultSubtitleTrack => 'Traccia sottotitoli predefinita'; + @override String get subtitlesOff => 'Disattivati'; + @override String get flagDefault => 'Predefinito'; + @override String get flagForced => 'Forzato'; + @override String get flagSelected => 'Selezionato'; + @override String get flagExternal => 'Esterno'; + @override String get flagHearingImpaired => 'Non udenti'; + @override String get flagDub => 'Doppiato'; + @override String get flagOriginal => 'Originale'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$it extends Translations$mediaMenu$en { @override String get shufflePlay => 'Riproduzione casuale'; @override String get shuffleNotAvailableOffline => 'Riproduzione casuale non disponibile offline'; @override String get fileInfo => 'Info sul file'; + @override String get deleteEpisodeFromServer => 'Elimina episodio dal server'; + @override String get deleteSeasonFromServer => 'Elimina stagione dal server'; + @override String get deleteShowFromServer => 'Elimina serie dal server'; + @override String get deleteMovieFromServer => 'Elimina film dal server'; + @override String get deleteEpisodeTitle => 'Eliminare questo episodio?'; + @override String get deleteSeasonTitle => 'Eliminare questa stagione?'; + @override String get deleteShowTitle => 'Eliminare questa serie?'; + @override String get deleteMovieTitle => 'Eliminare questo film?'; + @override String get deleteEpisodeConfirm => 'Elimina episodio'; + @override String get deleteSeasonConfirm => 'Elimina stagione'; + @override String get deleteShowConfirm => 'Elimina serie'; + @override String get deleteMovieConfirm => 'Elimina film'; + @override String get deleteAnyway => 'Elimina comunque'; + @override String confirmDeleteTarget({required Object title}) => 'Eliminare definitivamente ${title} dal tuo server?'; @override String get deleteMultipleWarning => 'Sono inclusi tutti gli episodi e i relativi file.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: 'Questo elimina tutti i ${n} episodio in essa contenuto e il relativo file.', + other: 'Questo elimina tutti i ${n} episodi in essa contenuti e i relativi file.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: 'Questo elemento è archiviato in ${n} file, che verrà eliminato.', + other: 'Questo elemento è archiviato in ${n} file, e tutti verranno eliminati.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: '${n} altro episodio è archiviato nello stesso file e verrà eliminato anche lui:', + other: '${n} altri episodi sono archiviati nello stesso file e verranno eliminati anche loro:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy non ha potuto verificare quali file rimuoverà, quindi potrebbe eliminare più di quanto indicato sopra. Annulla e riprova, oppure elimina comunque.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Il tuo server non ha fornito i dettagli del file per questo elemento, quindi Plezy non può verificare quali file rimuoverà. Potrebbe eliminare più di quanto indicato sopra.'; @override String get mediaDeletedSuccessfully => 'Elemento multimediale eliminato correttamente'; @override String get mediaFailedToDelete => 'Impossibile eliminare l\'elemento multimediale'; @override String get rate => 'Valuta'; @@ -657,6 +786,9 @@ class _Translations$videoControls$it extends Translations$videoControls$en { @override String get playNext => 'Riproduci il successivo'; @override String get playButton => 'Riproduci'; @override String get pauseButton => 'Pausa'; + @override String get playbackPaused => 'In pausa'; + @override String get playbackResumed => 'Riproduzione'; + @override String get loadingVideo => 'Caricamento video'; @override String get showPlaybackControls => 'Mostra i controlli di riproduzione'; @override String get hidePlaybackControls => 'Nascondi i controlli di riproduzione'; @override String seekBackwardButton({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; @@ -726,6 +858,7 @@ class _Translations$messages$it extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Rimosso da Continua a guardare'; @override String errorLoading({required Object error}) => 'Errore: ${error}'; + @override String get searchPartialResults => 'Non è stato possibile cercare in alcuni server multimediali. Vengono mostrati i risultati disponibili.'; @override String get streamInterrupted => 'La riproduzione si è interrotta. Premi Riproduci o vai a un altro punto per riprovare.'; @override String get liveStreamInterrupted => 'La diretta si è interrotta. Premi Riproduci per riprovare.'; @override String get fileInfoNotAvailable => 'Informazioni sul file non disponibili'; @@ -764,6 +897,8 @@ class _Translations$messages$it extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Passaggio al lettore compatibile...'; @override String get serverLimitTitle => 'Riproduzione non riuscita'; @override String get serverLimitBody => 'Errore del server (HTTP 500). È probabile che un limite di banda o transcodifica abbia impedito questa sessione. Chiedi al proprietario di modificare il limite.'; + @override String get mediaUnreadableTitle => 'File non disponibile'; + @override String get mediaUnreadableBody => 'Il server ha trovato questo elemento ma non ha potuto leggere il suo file (HTTP 404). Il file è stato probabilmente spostato o eliminato, oppure il suo storage è offline. Chiedi al proprietario del server di controllare il file e di riscansionare la libreria.'; @override String get logsUploaded => 'Log caricati'; @override String get logsUploadFailed => 'Impossibile caricare i log'; @override String get logId => 'ID log'; @@ -917,6 +1052,8 @@ class _Translations$connections$it extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sessione scaduta per ${name}'; @override String sessionExpiredMany({required Object count}) => 'Sessione scaduta per ${count} server'; @override String get signInAgain => 'Accedi di nuovo'; + @override String editMediaBrowserTitle({required Object product}) => 'Modifica connessione ${product}'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Aggiungi o rimuovi gli URL per ${serverName}. Plezy userà l\'URL raggiungibile con la latenza più bassa.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$it extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Ricerca non riuscita: ${error}'; + @override String get searchUnavailable => 'La ricerca non ha potuto raggiungere alcun server multimediale.'; @override String connectionTimeout({required Object context}) => 'Tempo scaduto per la connessione durante il caricamento di ${context}'; @override String get connectionFailed => 'Impossibile connettersi al server multimediale'; @override String unableToLoad({required Object context}) => 'Impossibile caricare ${context}. Riprova.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$it extends Translations$logs$en { @override String get uploadLogs => 'Carica log'; } +// Path: startup +class _Translations$startup$it extends Translations$startup$en { + _Translations$startup$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy non ha potuto avviarsi'; + @override String get failedBody => 'Si è verificato un errore durante l\'avvio. I dettagli seguenti indicano cosa non ha funzionato.'; + @override String get failedBodyRepairable => 'Il file delle impostazioni salvate di Plezy è danneggiato e deve essere ricostruito prima che Plezy possa avviarsi. Riprovare non servirà: scegli Ripara storage.'; + @override String get phaseLabel => 'Passaggio'; + @override String get showDetails => 'Mostra dettagli'; + @override String get hideDetails => 'Nascondi dettagli'; + @override String get copyDetails => 'Copia dettagli'; + @override String get detailsCopied => 'Dettagli copiati negli appunti'; + @override String get uploadDetails => 'Carica dettagli'; + @override String get repairStorage => 'Ripara storage'; + @override String get repairTitle => 'Riparare i dati archiviati?'; + @override String get repairBodyCommon => 'Il file delle impostazioni di Plezy è danneggiato e non può essere letto. La riparazione ripristina ogni impostazione al suo valore predefinito.'; + @override String get repairBodyOneCredential => 'Un accesso salvato è danneggiato e non può essere letto. La riparazione rimuove solo quello; le altre impostazioni restano intatte.'; + @override String get repairBodySignInsKept => 'I tuoi server e profili dovrebbero rimanere con accesso effettuato.'; + @override String get repairBodySignInsLost => 'La chiave che protegge i tuoi accessi salvati non può essere recuperata da questo file, quindi dovrai effettuare di nuovo l\'accesso a ogni server e profilo. Nulla sul tuo server multimediale è interessato.'; + @override String get repairBodySessionsUncertain => 'I tracker (MAL, AniList, Simkl, Trakt) e Seerr sono archiviati separatamente e potrebbero sopravvivere o meno. Plezy ti dirà esattamente cosa ha conservato.'; + @override String get repairConfirm => 'Ripara'; + @override String get repairSucceeded => 'Storage riparato'; + @override String get repairNeedsRestart => 'Storage riparato — riavvio richiesto'; + @override String get restartRequiredBody => 'I tuoi dati sono stati riparati, ma Plezy deve ripartire da zero prima di poterli usare. Chiudi Plezy e riaprilo.'; + @override String get quitPlezy => 'Esci da Plezy'; + @override String get repairFailed => 'Riparazione non riuscita'; + @override String get repairKeptSignIns => 'I tuoi server e profili hanno ancora l\'accesso effettuato.'; + @override String get repairLostSignIns => 'La chiave che protegge i tuoi accessi salvati non ha potuto essere recuperata. Dovrai effettuare di nuovo l\'accesso a ogni server e profilo.'; + @override String get repairLostSessions => 'Almeno una connessione a un tracker o a Seerr è andata persa e deve essere riconnessa.'; + @override String get backupTitle => 'È stata conservata una copia del file danneggiato'; + @override String get backupWarning => 'Contiene le tue credenziali di accesso. Non caricarla né condividerla.'; + @override String get deleteBackup => 'Elimina copia'; + @override String get backupDeleted => 'Copia eliminata.'; + @override String get previousFailureTitle => 'Plezy non è riuscito ad avviarsi l\'ultima volta'; +} + // Path: licenses class _Translations$licenses$it extends Translations$licenses$en { _Translations$licenses$it._(TranslationsIt root) : this._root = root, super.internal(root); @@ -1099,7 +1276,7 @@ class _Translations$navigation$it extends Translations$navigation$en { // Translations @override String get libraries => 'Librerie'; @override String get downloads => 'Download'; - @override String get liveTv => 'TV in diretta'; + @override String get liveTv => 'Diretta'; @override String get explore => 'Esplora'; } @@ -1132,6 +1309,20 @@ class _Translations$explore$it extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Nessun risultato per "${query}"'; @override String searchPrompt({required Object source}) => 'Cerca film e serie TV su ${source}.'; @override String get searchFailed => 'Ricerca fallita. Controlla la connessione e riprova.'; + @override late final _Translations$explore$badge$it badge = _Translations$explore$badge$it._(_root); + @override late final _Translations$explore$stats$it stats = _Translations$explore$stats$it._(_root); + @override late final _Translations$explore$season$it season = _Translations$explore$season$it._(_root); + @override late final _Translations$explore$format$it format = _Translations$explore$format$it._(_root); + @override late final _Translations$explore$sourceMaterial$it sourceMaterial = _Translations$explore$sourceMaterial$it._(_root); + @override late final _Translations$explore$creditRole$it creditRole = _Translations$explore$creditRole$it._(_root); + @override late final _Translations$explore$relation$it relation = _Translations$explore$relation$it._(_root); + @override String broadcast({required Object day, required Object time}) => 'Va in onda ${day} alle ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Va in onda ${day} alle ${time} ${timezone}'; + @override late final _Translations$explore$detail$it detail = _Translations$explore$detail$it._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: '${n} risultato', + other: '${n} risultati', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$it extends Translations$downloads$en { @override String get editSyncRule => 'Modifica regola di sincronizzazione'; @override String get removeSyncRule => 'Rimuovi regola di sincronizzazione'; @override String removeSyncRuleConfirm({required Object title}) => 'Interrompere la sincronizzazione di "${title}"? Gli episodi scaricati verranno mantenuti.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Interrompere la sincronizzazione di "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Elimina anche i download associati'; + @override String get deleteSyncRuleDownloadsDescription => 'I download usati da un\'altra regola di sincronizzazione o da un altro profilo verranno conservati.'; @override String syncRuleCreated({required Object count}) => 'Regola di sincronizzazione creata — ${count} episodi non visti mantenuti'; @override String get syncRuleUpdated => 'Regola di sincronizzazione aggiornata'; @override String get syncRuleRemoved => 'Regola di sincronizzazione rimossa'; + @override String get syncRuleAndDownloadsRemoved => 'Regola di sincronizzazione e download associati rimossi'; + @override String get syncRuleCleanupBusy => 'Le regole di sincronizzazione sono in fase di aggiornamento. Riprova tra un momento.'; + @override String get syncRuleCleanupUnavailable => 'Non è stato possibile identificare in sicurezza i download associati. Riconnetti il server e riprova, oppure rimuovi la regola senza eliminare i download.'; @override String syncedNewEpisodes({required Object count, required Object title}) => '${count} nuovi episodi sincronizzati per ${title}'; @override String get activeSyncRules => 'Regole di sincronizzazione'; @override String get noSyncRules => 'Nessuna regola di sincronizzazione'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$it extends Translations$addServer$en { final TranslationsIt _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Aggiungi server ${product}'; @override String get serverUrls => 'URL del server'; @override String get serverUrlsHelper => 'Sono consentiti più URL, separati da virgole.'; @override String get findServer => 'Trova il server'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Ricerca di server ${product} locali...'; + @override String localMediaBrowserServers({required Object product}) => 'Server ${product} locali'; @override String get username => 'Nome utente'; @override String get password => 'Password'; @override String get signIn => 'Accedi'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$it extends Translations$addServer$en { @override String get addPlexTitle => 'Accedi con Plex'; @override String get pinExpired => 'PIN scaduto prima dell\'accesso. Riprova.'; @override String failedToRegisterAccount({required Object error}) => 'Registrazione account non riuscita: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Inserisci l\'URL del server ${product}'; @override String get addConnectionTitle => 'Aggiungi connessione'; @override String addConnectionTitleScoped({required Object name}) => 'Aggiungi a ${name}'; @override String get signInWithPlexCard => 'Accedi con Plex'; @override String get signInWithPlexCardSubtitle => 'Autorizza questo dispositivo. I server condivisi vengono aggiunti.'; @override String get signInWithPlexCardSubtitleScoped => 'Autorizza un account Plex. Gli utenti Home diventano profili.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Connettiti a ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Inserisci l\'URL del server, il nome utente e la password.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Accedi al tuo server ${product}. Associato a ${name}.'; @override String get borrowFromAnotherProfile => 'Prendi in prestito da un altro profilo'; @override String get borrowFromAnotherProfileSubtitle => 'Riutilizza la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$it extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get critic => 'Critici'; + @override String get audience => 'Pubblico'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Critici di Rotten Tomatoes'; + @override String get rottenTomatoesAudience => 'Pubblico di Rotten Tomatoes'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$it extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$it._(TranslationsIt root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$it extends Translations$explore$status$en { @override String get upcoming => 'In arrivo'; } +// Path: explore.badge +class _Translations$explore$badge$it extends Translations$explore$badge$en { + _Translations$explore$badge$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} popolari'; + @override String rankAiring({required Object n}) => '#${n} in onda'; + @override String rankRated({required Object n}) => '#${n} valutati'; + @override String rankFavorited({required Object n}) => '#${n} preferiti'; + @override String rankTrending({required Object n}) => '#${n} di tendenza'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} in ${season}'; + @override String watchingNow({required Object n}) => '${n} in visione'; + @override String get available => 'Disponibile'; + @override String get partiallyAvailable => 'Parzialmente disponibile'; + @override String get availableIn4k => 'Disponibile in 4K'; + @override String get requested => 'Richiesto'; + @override String get pendingApproval => 'In attesa di approvazione'; + @override String get processing => 'In elaborazione'; + @override String get declined => 'Rifiutato'; + @override String get requestFailed => 'Richiesta non riuscita'; + @override String get requested4k => 'Richiesto in 4K'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} stagioni'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Ep ${episode} tra ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Prossimo tra ${duration}'; + @override String episodesShort({required Object n}) => '${n} ep'; + @override String minutesPerEpisode({required Object n}) => '${n} min/ep'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$it extends Translations$explore$stats$en { + _Translations$explore$stats$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} in elenco'; + @override String viewersDay({required Object n}) => '${n} guardati oggi'; + @override String viewersWeek({required Object n}) => '${n} guardati questa settimana'; + @override String viewersMonth({required Object n}) => '${n} guardati questo mese'; + @override String viewersYear({required Object n}) => '${n} guardati quest\'anno'; + @override String viewersAllTime({required Object n}) => '${n} spettatori'; + @override String planning({required Object n}) => '${n} hanno in programma di guardarlo'; + @override String favorited({required Object n}) => '${n} preferiti'; + @override String dropRate({required Object percent}) => '${percent} lo ha abbandonato'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: '${n} commento', + other: '${n} commenti', + ); + @override String votes({required Object n}) => '${n} voti'; + @override String watching({required Object n}) => '${n} lo stanno guardando'; + @override String completed({required Object n}) => '${n} completati'; + @override String onHold({required Object n}) => '${n} in pausa'; + @override String dropped({required Object n}) => '${n} abbandonati'; +} + +// Path: explore.season +class _Translations$explore$season$it extends Translations$explore$season$en { + _Translations$explore$season$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get winter => 'Inverno'; + @override String get spring => 'Primavera'; + @override String get summer => 'Estate'; + @override String get fall => 'Autunno'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$it extends Translations$explore$format$en { + _Translations$explore$format$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV Short'; + @override String get movie => 'Film'; + @override String get special => 'Speciale'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musica'; + @override String get other => 'Altro'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$it extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get original => 'Originale'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Romanzo'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Videogioco'; + @override String get webComic => 'Web comic'; + @override String get musicRelease => 'Musica'; + @override String get otherMedia => 'Altro'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$it extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get director => 'Regista'; + @override String get writer => 'Sceneggiatore'; + @override String get producer => 'Produttore'; + @override String get creator => 'Creatore'; + @override String get composer => 'Compositore'; +} + +// Path: explore.relation +class _Translations$explore$relation$it extends Translations$explore$relation$en { + _Translations$explore$relation$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Sequel'; + @override String get sideStory => 'Storia secondaria'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Versione alternativa'; + @override String get summary => 'Riepilogo'; + @override String get parentStory => 'Storia originale'; + @override String get adaptation => 'Adattamento'; + @override String get other => 'Correlati'; +} + +// Path: explore.detail +class _Translations$explore$detail$it extends Translations$explore$detail$en { + _Translations$explore$detail$it._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Titolo originale'; + @override String get alsoKnownAs => 'Conosciuto anche come'; + @override String get studios => 'Studi'; + @override String get country => 'Paese'; + @override String get language => 'Lingua'; + @override String get released => 'Uscito'; + @override String get physicalRelease => 'Su disco'; + @override String get ended => 'Concluso'; + @override String addedOn({required Object date}) => 'Aggiunto ${date}'; + @override String get yourRating => 'La tua valutazione'; + @override String get budget => 'Budget'; + @override String get revenue => 'Incassi'; + @override String get contentAdvisory => 'Guida all\'età'; + @override String get tags => 'Tag'; + @override String get revealSpoilerTags => 'Mostra tag spoiler'; + @override String get links => 'Link'; + @override String get watchOn => 'Guarda su'; + @override String get watchTrailer => 'Guarda trailer'; + @override String openOn({required Object site}) => 'Apri su ${site}'; + @override String get crew => 'Cast tecnico'; + @override String get ratings => 'Valutazioni'; + @override String get schedule => 'Programmazione'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: 'Consigliato da ${n} utente', + other: 'Consigliato da ${n} utenti', + ); + @override String recommendedBy({required Object who}) => 'Consigliato da ${who}'; + @override String favoritedBy({required Object who}) => 'Preferito da ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} non ancora in onda'; + @override String recommendedByPercent({required Object percent}) => 'Consigliato dal ${percent} degli spettatori'; + @override String get relatedTitles => 'Titoli correlati'; + @override String get background => 'Contesto'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$it extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$it._(TranslationsIt root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$it extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsIt { 'auth.waitingForAuth' => 'In attesa di autenticazione...\nAccedi dal browser.', 'auth.useBrowser' => 'Usa il browser', 'auth.or' => 'o', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Connettiti a ${product}', 'auth.useQuickConnect' => 'Usa Quick Connect', 'auth.quickConnectInstructions' => 'Apri Quick Connect in Jellyfin e inserisci questo codice.', 'auth.quickConnectWaiting' => 'In attesa di approvazione…', @@ -2248,6 +2654,17 @@ extension on TranslationsIt { 'common.fullscreen' => 'Schermo intero', 'common.exitFullscreen' => 'Esci dalla modalità a schermo intero', 'common.pressBackAgainToExit' => 'Premi di nuovo Indietro per uscire', + 'common.ratingSource.critic' => 'Critici', + 'common.ratingSource.audience' => 'Pubblico', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Critici di Rotten Tomatoes', + 'common.ratingSource.rottenTomatoesAudience' => 'Pubblico di Rotten Tomatoes', 'screens.licenses' => 'Licenze', 'screens.switchProfile' => 'Cambia profilo', 'screens.subtitleStyling' => 'Stile sottotitoli', @@ -2284,6 +2701,7 @@ extension on TranslationsIt { 'settings.darkTheme' => 'Scuro', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Densità della libreria', + 'settings.displayScale' => 'Scala di visualizzazione', 'settings.compact' => 'Compatta', 'settings.comfortable' => 'Comoda', 'settings.tvCornerSpotlightBackdrop' => 'Sfondo in evidenza nell\'angolo', @@ -2333,6 +2751,11 @@ extension on TranslationsIt { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => 'Automatica (consigliata)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB di memoria disponibile. Un buffer di ${size}MB può influire sulla riproduzione.', + 'settings.playbackBuffer' => 'Buffer di riproduzione', + 'settings.playbackBufferAuto' => 'Auto (consigliato)', + 'settings.playbackBufferLarge' => 'Grande', + 'settings.playbackBufferExtraLarge' => 'Extra grande', + 'settings.playbackBufferDescription' => 'Bufferizza di più contro connessioni instabili. Limitato anche dalla dimensione del buffer.', 'settings.defaultQualityTitle' => 'Qualità predefinita', 'settings.musicQualityTitle' => 'Qualità musicale', 'settings.subtitleStyling' => 'Stile sottotitoli', @@ -2366,6 +2789,9 @@ extension on TranslationsIt { 'settings.debugLoggingDescription' => 'Abilita una registrazione dettagliata per la risoluzione dei problemi', 'settings.viewLogs' => 'Visualizza i log', 'settings.viewLogsDescription' => 'Visualizza i log dell\'applicazione', + 'settings.clearImageCache' => 'Svuota cache immagini', + 'settings.clearImageCacheDescription' => 'Svuota le immagini e le miniature memorizzate nella cache. Le immagini potrebbero caricarsi più lentamente finché non vengono scaricate di nuovo.', + 'settings.clearImageCacheSuccess' => 'Cache immagini svuotata correttamente', 'settings.resetSettings' => 'Ripristina impostazioni', 'settings.resetSettingsDescription' => 'Ripristina le impostazioni predefinite. Questa operazione non può essere annullata.', 'settings.resetSettingsSuccess' => 'Impostazioni ripristinate correttamente', @@ -2549,29 +2975,118 @@ extension on TranslationsIt { 'hotkeys.actions.skipMarker' => 'Salta intro/titoli di coda', 'hotkeys.actions.screenshot' => 'Cattura schermata', 'fileInfo.title' => 'Info sul file', + 'fileInfo.overview' => 'Panoramica', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Audio', 'fileInfo.subtitles' => 'Sottotitoli', + 'fileInfo.images' => 'Immagini incorporate', + 'fileInfo.dataStreams' => 'Flussi di dati', + 'fileInfo.lyrics' => 'Testi', 'fileInfo.file' => 'File', + 'fileInfo.attachments' => 'Allegati', + 'fileInfo.delivery' => 'Distribuzione', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Versione ${index} di ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'File ${index} di ${count}', + 'fileInfo.noStreams' => 'Il server non ha segnalato flussi per questo file.', + 'fileInfo.copyPath' => 'Copia percorso', + 'fileInfo.pathCopied' => 'Percorso del file copiato', 'fileInfo.codec' => 'Codec', + 'fileInfo.codecTag' => 'Tag codec', 'fileInfo.resolution' => 'Risoluzione', + 'fileInfo.codedResolution' => 'Risoluzione codificata', 'fileInfo.bitrate' => 'Bitrate', 'fileInfo.frameRate' => 'Frequenza fotogrammi', + 'fileInfo.rotation' => 'Rotazione', + 'fileInfo.comment' => 'Commento', + 'fileInfo.audioDescription' => 'Descrizione audio', + 'fileInfo.headerCompression' => 'Compressione header', + 'fileInfo.sidecarFile' => 'File sidecar', + 'fileInfo.transportTimestamp' => 'Timestamp di trasporto', + 'fileInfo.displayOffset' => 'Offset di visualizzazione', + 'fileInfo.previewFailureCode' => 'Codice errore anteprima', + 'fileInfo.previewRetries' => 'Riprova anteprima', 'fileInfo.aspectRatio' => 'Proporzioni', + 'fileInfo.pixelAspectRatio' => 'Aspect ratio pixel', 'fileInfo.profile' => 'Profilo', + 'fileInfo.level' => 'Livello', 'fileInfo.bitDepth' => 'Profondità in bit', + 'fileInfo.pixelFormat' => 'Formato pixel', 'fileInfo.colorSpace' => 'Spazio colore', 'fileInfo.colorRange' => 'Gamma colori', 'fileInfo.colorPrimaries' => 'Colori primari', + 'fileInfo.colorTransfer' => 'Trasferimento colore', 'fileInfo.chromaSubsampling' => 'Sottocampionamento cromatico', + 'fileInfo.chromaLocation' => 'Posizione crominanza', + 'fileInfo.scanType' => 'Tipo di scansione', + 'fileInfo.interlaced' => 'Interlacciato', + 'fileInfo.anamorphic' => 'Anamorfico', + 'fileInfo.referenceFrames' => 'Frame di riferimento', + 'fileInfo.dynamicRange' => 'Dynamic Range', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision Level', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision Version', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision Layers', + 'fileInfo.baseLayerCompatibility' => 'Compatibilità layer di base', + 'fileInfo.avcBitstream' => 'Bitstream AVC', + 'fileInfo.nalLengthSize' => 'Dimensione lunghezza NAL', + 'fileInfo.scalingMatrix' => 'Matrice di scaling personalizzata', + 'fileInfo.streamIdentifier' => 'Identificatore flusso', + 'fileInfo.streamIndex' => 'Indice flusso', + 'fileInfo.streamId' => 'ID flusso', + 'fileInfo.language' => 'Lingua', + 'fileInfo.languageCode' => 'Codice lingua', + 'fileInfo.streamTitle' => 'Titolo traccia', 'fileInfo.channels' => 'Canali', + 'fileInfo.sampleRate' => 'Frequenza di campionamento', + 'fileInfo.spatialAudio' => 'Audio spaziale', + 'fileInfo.textBased' => 'Testuale', + 'fileInfo.subtitleFormat' => 'Formato sidecar', + 'fileInfo.provider' => 'Provider', + 'fileInfo.matchScore' => 'Punteggio corrispondenza', + 'fileInfo.externalDelivery' => 'Può essere servito separatamente', + 'fileInfo.sidecarPath' => 'Percorso sidecar', + 'fileInfo.sourceStream' => 'Copiato da', + 'fileInfo.temporary' => 'Temporaneo', + 'fileInfo.timeBase' => 'Base temporale', 'fileInfo.overallBitrate' => 'Bitrate complessivo', 'fileInfo.path' => 'Percorso', + 'fileInfo.fileName' => 'Nome file', 'fileInfo.size' => 'Dimensione', + 'fileInfo.totalSize' => 'Dimensione totale', 'fileInfo.container' => 'Contenitore', 'fileInfo.duration' => 'Durata', + 'fileInfo.previewThumbnails' => 'Miniature anteprima', + 'fileInfo.previewIndex' => 'Indice anteprima', + 'fileInfo.packetLength' => 'Lunghezza pacchetto', + 'fileInfo.filePresent' => 'File presente', + 'fileInfo.fileReadable' => 'Leggibile dal server', + 'fileInfo.streamPath' => 'Percorso flusso', 'fileInfo.optimizedForStreaming' => 'Ottimizzato per lo streaming', 'fileInfo.has64bitOffsets' => 'Offset a 64 bit', + 'fileInfo.protocol' => 'Protocollo', + 'fileInfo.mediaType' => 'Tipo di supporto', + 'fileInfo.sourceKind' => 'Tipo di origine', + 'fileInfo.optimizedVersion' => 'Versione ottimizzata', + 'fileInfo.optimizationTarget' => 'Obiettivo ottimizzazione', + 'fileInfo.deletedAt' => 'Eliminato', + 'fileInfo.remoteSource' => 'Origine remota', + 'fileInfo.infiniteStream' => 'Flusso infinito', + 'fileInfo.directPlay' => 'Riproduzione diretta', + 'fileInfo.directStream' => 'Streaming diretto', + 'fileInfo.transcoding' => 'Transcodifica', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'ID versione', + 'fileInfo.fileId' => 'ID file', + 'fileInfo.defaultAudioTrack' => 'Traccia audio predefinita', + 'fileInfo.defaultSubtitleTrack' => 'Traccia sottotitoli predefinita', + 'fileInfo.subtitlesOff' => 'Disattivati', + 'fileInfo.flagDefault' => 'Predefinito', + 'fileInfo.flagForced' => 'Forzato', + 'fileInfo.flagSelected' => 'Selezionato', + 'fileInfo.flagExternal' => 'Esterno', + 'fileInfo.flagHearingImpaired' => 'Non udenti', + 'fileInfo.flagDub' => 'Doppiato', + 'fileInfo.flagOriginal' => 'Originale', 'mediaMenu.markAsWatched' => 'Segna come visto', 'mediaMenu.markAsUnwatched' => 'Segna come non visto', 'mediaMenu.removeFromContinueWatching' => 'Rimuovi da Continua a guardare', @@ -2580,7 +3095,28 @@ extension on TranslationsIt { 'mediaMenu.shufflePlay' => 'Riproduzione casuale', 'mediaMenu.shuffleNotAvailableOffline' => 'Riproduzione casuale non disponibile offline', 'mediaMenu.fileInfo' => 'Info sul file', + 'mediaMenu.deleteEpisodeFromServer' => 'Elimina episodio dal server', + 'mediaMenu.deleteSeasonFromServer' => 'Elimina stagione dal server', + 'mediaMenu.deleteShowFromServer' => 'Elimina serie dal server', + 'mediaMenu.deleteMovieFromServer' => 'Elimina film dal server', + 'mediaMenu.deleteEpisodeTitle' => 'Eliminare questo episodio?', + 'mediaMenu.deleteSeasonTitle' => 'Eliminare questa stagione?', + 'mediaMenu.deleteShowTitle' => 'Eliminare questa serie?', + 'mediaMenu.deleteMovieTitle' => 'Eliminare questo film?', + 'mediaMenu.deleteEpisodeConfirm' => 'Elimina episodio', + 'mediaMenu.deleteSeasonConfirm' => 'Elimina stagione', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Elimina serie', + 'mediaMenu.deleteMovieConfirm' => 'Elimina film', + 'mediaMenu.deleteAnyway' => 'Elimina comunque', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Eliminare definitivamente ${title} dal tuo server?', 'mediaMenu.deleteMultipleWarning' => 'Sono inclusi tutti gli episodi e i relativi file.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: 'Questo elimina tutti i ${n} episodio in essa contenuto e il relativo file.', other: 'Questo elimina tutti i ${n} episodi in essa contenuti e i relativi file.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: 'Questo elemento è archiviato in ${n} file, che verrà eliminato.', other: 'Questo elemento è archiviato in ${n} file, e tutti verranno eliminati.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: '${n} altro episodio è archiviato nello stesso file e verrà eliminato anche lui:', other: '${n} altri episodi sono archiviati nello stesso file e verranno eliminati anche loro:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy non ha potuto verificare quali file rimuoverà, quindi potrebbe eliminare più di quanto indicato sopra. Annulla e riprova, oppure elimina comunque.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Il tuo server non ha fornito i dettagli del file per questo elemento, quindi Plezy non può verificare quali file rimuoverà. Potrebbe eliminare più di quanto indicato sopra.', 'mediaMenu.mediaDeletedSuccessfully' => 'Elemento multimediale eliminato correttamente', 'mediaMenu.mediaFailedToDelete' => 'Impossibile eliminare l\'elemento multimediale', 'mediaMenu.rate' => 'Valuta', @@ -2646,6 +3182,9 @@ extension on TranslationsIt { 'videoControls.playNext' => 'Riproduci il successivo', 'videoControls.playButton' => 'Riproduci', 'videoControls.pauseButton' => 'Pausa', + 'videoControls.playbackPaused' => 'In pausa', + 'videoControls.playbackResumed' => 'Riproduzione', + 'videoControls.loadingVideo' => 'Caricamento video', 'videoControls.showPlaybackControls' => 'Mostra i controlli di riproduzione', 'videoControls.hidePlaybackControls' => 'Nascondi i controlli di riproduzione', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi', @@ -2700,8 +3239,6 @@ extension on TranslationsIt { 'videoControls.subtitleDownloaded' => 'Sottotitolo scaricato', 'videoControls.subtitleDownloadedNotApplied' => 'Il sottotitolo è stato scaricato, ma non è stato possibile selezionarlo', 'videoControls.subtitleDownloadFailed' => 'Impossibile scaricare il sottotitolo', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Cerca lingue...', 'messages.markedAsWatched' => 'Segnato come visto', 'messages.markedAsUnwatched' => 'Segnato come non visto', @@ -2711,6 +3248,7 @@ extension on TranslationsIt { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: 'Rimosso automaticamente ${n} download già visto', other: 'Rimossi automaticamente ${n} download già visti', ), 'messages.removedFromContinueWatching' => 'Rimosso da Continua a guardare', 'messages.errorLoading' => ({required Object error}) => 'Errore: ${error}', + 'messages.searchPartialResults' => 'Non è stato possibile cercare in alcuni server multimediali. Vengono mostrati i risultati disponibili.', 'messages.streamInterrupted' => 'La riproduzione si è interrotta. Premi Riproduci o vai a un altro punto per riprovare.', 'messages.liveStreamInterrupted' => 'La diretta si è interrotta. Premi Riproduci per riprovare.', 'messages.fileInfoNotAvailable' => 'Informazioni sul file non disponibili', @@ -2749,6 +3287,8 @@ extension on TranslationsIt { 'messages.switchingToCompatiblePlayer' => 'Passaggio al lettore compatibile...', 'messages.serverLimitTitle' => 'Riproduzione non riuscita', 'messages.serverLimitBody' => 'Errore del server (HTTP 500). È probabile che un limite di banda o transcodifica abbia impedito questa sessione. Chiedi al proprietario di modificare il limite.', + 'messages.mediaUnreadableTitle' => 'File non disponibile', + 'messages.mediaUnreadableBody' => 'Il server ha trovato questo elemento ma non ha potuto leggere il suo file (HTTP 404). Il file è stato probabilmente spostato o eliminato, oppure il suo storage è offline. Chiedi al proprietario del server di controllare il file e di riscansionare la libreria.', 'messages.logsUploaded' => 'Log caricati', 'messages.logsUploadFailed' => 'Impossibile caricare i log', 'messages.logId' => 'ID log', @@ -2857,6 +3397,8 @@ extension on TranslationsIt { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sessione scaduta per ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sessione scaduta per ${count} server', 'connections.signInAgain' => 'Accedi di nuovo', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Modifica connessione ${product}', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Aggiungi o rimuovi gli URL per ${serverName}. Plezy userà l\'URL raggiungibile con la latenza più bassa.', 'discover.title' => 'Esplora', 'discover.noContentAvailable' => 'Nessun contenuto disponibile', 'discover.addMediaToLibraries' => 'Aggiungi contenuti multimediali alle tue librerie', @@ -2882,6 +3424,7 @@ extension on TranslationsIt { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} minuti rimanenti', 'discover.moreLikeThis' => 'Altri contenuti simili', 'errors.searchFailed' => ({required Object error}) => 'Ricerca non riuscita: ${error}', + 'errors.searchUnavailable' => 'La ricerca non ha potuto raggiungere alcun server multimediale.', 'errors.connectionTimeout' => ({required Object context}) => 'Tempo scaduto per la connessione durante il caricamento di ${context}', 'errors.connectionFailed' => 'Impossibile connettersi al server multimediale', 'errors.unableToLoad' => ({required Object context}) => 'Impossibile caricare ${context}. Riprova.', @@ -2989,13 +3532,43 @@ extension on TranslationsIt { 'logs.clearLogs' => 'Cancella log', 'logs.copyLogs' => 'Copia log', 'logs.uploadLogs' => 'Carica log', + 'startup.failedTitle' => 'Plezy non ha potuto avviarsi', + 'startup.failedBody' => 'Si è verificato un errore durante l\'avvio. I dettagli seguenti indicano cosa non ha funzionato.', + 'startup.failedBodyRepairable' => 'Il file delle impostazioni salvate di Plezy è danneggiato e deve essere ricostruito prima che Plezy possa avviarsi. Riprovare non servirà: scegli Ripara storage.', + 'startup.phaseLabel' => 'Passaggio', + 'startup.showDetails' => 'Mostra dettagli', + 'startup.hideDetails' => 'Nascondi dettagli', + 'startup.copyDetails' => 'Copia dettagli', + 'startup.detailsCopied' => 'Dettagli copiati negli appunti', + 'startup.uploadDetails' => 'Carica dettagli', + 'startup.repairStorage' => 'Ripara storage', + 'startup.repairTitle' => 'Riparare i dati archiviati?', + 'startup.repairBodyCommon' => 'Il file delle impostazioni di Plezy è danneggiato e non può essere letto. La riparazione ripristina ogni impostazione al suo valore predefinito.', + 'startup.repairBodyOneCredential' => 'Un accesso salvato è danneggiato e non può essere letto. La riparazione rimuove solo quello; le altre impostazioni restano intatte.', + 'startup.repairBodySignInsKept' => 'I tuoi server e profili dovrebbero rimanere con accesso effettuato.', + 'startup.repairBodySignInsLost' => 'La chiave che protegge i tuoi accessi salvati non può essere recuperata da questo file, quindi dovrai effettuare di nuovo l\'accesso a ogni server e profilo. Nulla sul tuo server multimediale è interessato.', + 'startup.repairBodySessionsUncertain' => 'I tracker (MAL, AniList, Simkl, Trakt) e Seerr sono archiviati separatamente e potrebbero sopravvivere o meno. Plezy ti dirà esattamente cosa ha conservato.', + 'startup.repairConfirm' => 'Ripara', + 'startup.repairSucceeded' => 'Storage riparato', + 'startup.repairNeedsRestart' => 'Storage riparato — riavvio richiesto', + 'startup.restartRequiredBody' => 'I tuoi dati sono stati riparati, ma Plezy deve ripartire da zero prima di poterli usare. Chiudi Plezy e riaprilo.', + 'startup.quitPlezy' => 'Esci da Plezy', + 'startup.repairFailed' => 'Riparazione non riuscita', + 'startup.repairKeptSignIns' => 'I tuoi server e profili hanno ancora l\'accesso effettuato.', + 'startup.repairLostSignIns' => 'La chiave che protegge i tuoi accessi salvati non ha potuto essere recuperata. Dovrai effettuare di nuovo l\'accesso a ogni server e profilo.', + 'startup.repairLostSessions' => 'Almeno una connessione a un tracker o a Seerr è andata persa e deve essere riconnessa.', + 'startup.backupTitle' => 'È stata conservata una copia del file danneggiato', + 'startup.backupWarning' => 'Contiene le tue credenziali di accesso. Non caricarla né condividerla.', + 'startup.deleteBackup' => 'Elimina copia', + 'startup.backupDeleted' => 'Copia eliminata.', + 'startup.previousFailureTitle' => 'Plezy non è riuscito ad avviarsi l\'ultima volta', 'licenses.relatedPackages' => 'Pacchetti correlati', 'licenses.license' => 'Licenza', 'licenses.licenseNumber' => ({required Object number}) => 'Licenza ${number}', 'licenses.licensesCount' => ({required Object count}) => '${count} licenze', 'navigation.libraries' => 'Librerie', 'navigation.downloads' => 'Download', - 'navigation.liveTv' => 'TV in diretta', + 'navigation.liveTv' => 'Diretta', 'navigation.explore' => 'Esplora', 'explore.title' => 'Esplora', 'explore.selectSource' => 'Seleziona fonte', @@ -3032,6 +3605,113 @@ extension on TranslationsIt { 'explore.searchEmpty' => ({required Object query}) => 'Nessun risultato per "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Cerca film e serie TV su ${source}.', 'explore.searchFailed' => 'Ricerca fallita. Controlla la connessione e riprova.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} popolari', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} in onda', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} valutati', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} preferiti', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} di tendenza', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} in ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} in visione', + 'explore.badge.available' => 'Disponibile', + 'explore.badge.partiallyAvailable' => 'Parzialmente disponibile', + 'explore.badge.availableIn4k' => 'Disponibile in 4K', + 'explore.badge.requested' => 'Richiesto', + 'explore.badge.pendingApproval' => 'In attesa di approvazione', + 'explore.badge.processing' => 'In elaborazione', + 'explore.badge.declined' => 'Rifiutato', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Richiesta non riuscita', + 'explore.badge.requested4k' => 'Richiesto in 4K', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} stagioni', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Ep ${episode} tra ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Prossimo tra ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} ep', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/ep', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} in elenco', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} guardati oggi', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} guardati questa settimana', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} guardati questo mese', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} guardati quest\'anno', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} spettatori', + 'explore.stats.planning' => ({required Object n}) => '${n} hanno in programma di guardarlo', + 'explore.stats.favorited' => ({required Object n}) => '${n} preferiti', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} lo ha abbandonato', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: '${n} commento', other: '${n} commenti', ), + 'explore.stats.votes' => ({required Object n}) => '${n} voti', + 'explore.stats.watching' => ({required Object n}) => '${n} lo stanno guardando', + 'explore.stats.completed' => ({required Object n}) => '${n} completati', + 'explore.stats.onHold' => ({required Object n}) => '${n} in pausa', + 'explore.stats.dropped' => ({required Object n}) => '${n} abbandonati', + 'explore.season.winter' => 'Inverno', + 'explore.season.spring' => 'Primavera', + 'explore.season.summer' => 'Estate', + 'explore.season.fall' => 'Autunno', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV Short', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Speciale', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musica', + 'explore.format.other' => 'Altro', + 'explore.sourceMaterial.original' => 'Originale', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Romanzo', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Videogioco', + 'explore.sourceMaterial.webComic' => 'Web comic', + 'explore.sourceMaterial.musicRelease' => 'Musica', + 'explore.sourceMaterial.otherMedia' => 'Altro', + 'explore.creditRole.director' => 'Regista', + 'explore.creditRole.writer' => 'Sceneggiatore', + 'explore.creditRole.producer' => 'Produttore', + 'explore.creditRole.creator' => 'Creatore', + 'explore.creditRole.composer' => 'Compositore', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Sequel', + 'explore.relation.sideStory' => 'Storia secondaria', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Versione alternativa', + 'explore.relation.summary' => 'Riepilogo', + 'explore.relation.parentStory' => 'Storia originale', + 'explore.relation.adaptation' => 'Adattamento', + 'explore.relation.other' => 'Correlati', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Va in onda ${day} alle ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Va in onda ${day} alle ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Titolo originale', + 'explore.detail.alsoKnownAs' => 'Conosciuto anche come', + 'explore.detail.studios' => 'Studi', + 'explore.detail.country' => 'Paese', + 'explore.detail.language' => 'Lingua', + 'explore.detail.released' => 'Uscito', + 'explore.detail.physicalRelease' => 'Su disco', + 'explore.detail.ended' => 'Concluso', + 'explore.detail.addedOn' => ({required Object date}) => 'Aggiunto ${date}', + 'explore.detail.yourRating' => 'La tua valutazione', + 'explore.detail.budget' => 'Budget', + 'explore.detail.revenue' => 'Incassi', + 'explore.detail.contentAdvisory' => 'Guida all\'età', + 'explore.detail.tags' => 'Tag', + 'explore.detail.revealSpoilerTags' => 'Mostra tag spoiler', + 'explore.detail.links' => 'Link', + 'explore.detail.watchOn' => 'Guarda su', + 'explore.detail.watchTrailer' => 'Guarda trailer', + 'explore.detail.openOn' => ({required Object site}) => 'Apri su ${site}', + 'explore.detail.crew' => 'Cast tecnico', + 'explore.detail.ratings' => 'Valutazioni', + 'explore.detail.schedule' => 'Programmazione', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: 'Consigliato da ${n} utente', other: 'Consigliato da ${n} utenti', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Consigliato da ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Preferito da ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} non ancora in onda', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Consigliato dal ${percent} degli spettatori', + 'explore.detail.relatedTitles' => 'Titoli correlati', + 'explore.detail.background' => 'Contesto', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: '${n} risultato', other: '${n} risultati', ), 'liveTv.title' => 'TV in diretta', 'liveTv.guide' => 'Guida', 'liveTv.noChannels' => 'Nessun canale disponibile', @@ -3214,8 +3894,6 @@ extension on TranslationsIt { 'watchTogether.relayUnreachable' => 'Il server relay non è raggiungibile. Eventuali blocchi dell\'ISP potrebbero impedire l\'uso di Guarda insieme.', 'watchTogether.reconnectingToHost' => 'Riconnessione all\'host...', 'watchTogether.currentPlayback' => 'Riproduzione corrente', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Unisciti alla riproduzione corrente', 'watchTogether.joinCurrentPlaybackDescription' => 'Torna a ciò che l\'host sta guardando in questo momento', 'watchTogether.failedToOpenCurrentPlayback' => 'Impossibile aprire la riproduzione corrente', @@ -3284,9 +3962,15 @@ extension on TranslationsIt { 'downloads.editSyncRule' => 'Modifica regola di sincronizzazione', 'downloads.removeSyncRule' => 'Rimuovi regola di sincronizzazione', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Interrompere la sincronizzazione di "${title}"? Gli episodi scaricati verranno mantenuti.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Interrompere la sincronizzazione di "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Elimina anche i download associati', + 'downloads.deleteSyncRuleDownloadsDescription' => 'I download usati da un\'altra regola di sincronizzazione o da un altro profilo verranno conservati.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Regola di sincronizzazione creata — ${count} episodi non visti mantenuti', 'downloads.syncRuleUpdated' => 'Regola di sincronizzazione aggiornata', 'downloads.syncRuleRemoved' => 'Regola di sincronizzazione rimossa', + 'downloads.syncRuleAndDownloadsRemoved' => 'Regola di sincronizzazione e download associati rimossi', + 'downloads.syncRuleCleanupBusy' => 'Le regole di sincronizzazione sono in fase di aggiornamento. Riprova tra un momento.', + 'downloads.syncRuleCleanupUnavailable' => 'Non è stato possibile identificare in sicurezza i download associati. Riconnetti il server e riprova, oppure rimuovi la regola senza eliminare i download.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} nuovi episodi sincronizzati per ${title}', 'downloads.activeSyncRules' => 'Regole di sincronizzazione', 'downloads.noSyncRules' => 'Nessuna regola di sincronizzazione', @@ -3449,6 +4133,8 @@ extension on TranslationsIt { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Media DV RPU', 'performanceOverlay.dvSampleAverage' => 'Media camp. DV', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Luma max', 'performanceOverlay.minLuma' => 'Luma min', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsIt { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Attiva Plezy su ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Visita ${url} e inserisci questo codice:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Apri ${service} per attivare', @@ -3641,9 +4328,12 @@ extension on TranslationsIt { 'services.libraryFilter.modeHintWhitelist' => 'Sincronizza solo le librerie selezionate qui sotto.', 'services.libraryFilter.libraries' => 'Librerie', 'services.libraryFilter.noLibraries' => 'Nessuna libreria disponibile', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Aggiungi server ${product}', 'addServer.serverUrls' => 'URL del server', 'addServer.serverUrlsHelper' => 'Sono consentiti più URL, separati da virgole.', 'addServer.findServer' => 'Trova il server', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Ricerca di server ${product} locali...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Server ${product} locali', 'addServer.username' => 'Nome utente', 'addServer.password' => 'Password', 'addServer.signIn' => 'Accedi', @@ -3655,11 +4345,15 @@ extension on TranslationsIt { 'addServer.addPlexTitle' => 'Accedi con Plex', 'addServer.pinExpired' => 'PIN scaduto prima dell\'accesso. Riprova.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Registrazione account non riuscita: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Inserisci l\'URL del server ${product}', 'addServer.addConnectionTitle' => 'Aggiungi connessione', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Aggiungi a ${name}', 'addServer.signInWithPlexCard' => 'Accedi con Plex', 'addServer.signInWithPlexCardSubtitle' => 'Autorizza questo dispositivo. I server condivisi vengono aggiunti.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Autorizza un account Plex. Gli utenti Home diventano profili.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Connettiti a ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Inserisci l\'URL del server, il nome utente e la password.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Accedi al tuo server ${product}. Associato a ${name}.', 'addServer.borrowFromAnotherProfile' => 'Prendi in prestito da un altro profilo', 'addServer.borrowFromAnotherProfileSubtitle' => 'Riutilizza la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN.', _ => null, diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index 4cf5b9fa..6cee6015 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -67,6 +67,7 @@ class TranslationsJa extends Translations with BaseTranslations '認証を待っています…\nブラウザでサインインしてください。'; @override String get useBrowser => 'ブラウザを使用'; @override String get or => 'または'; + @override String connectToMediaBrowser({required Object product}) => '${product}に接続'; @override String get useQuickConnect => 'Quick Connect を使う'; @override String get quickConnectInstructions => 'JellyfinでQuick Connectを開き、このコードを入力してください。'; @override String get quickConnectWaiting => '承認を待っています…'; @@ -175,6 +177,7 @@ class _Translations$common$ja extends Translations$common$en { @override String get fullscreen => 'フルスクリーン'; @override String get exitFullscreen => 'フルスクリーンを終了'; @override String get pressBackAgainToExit => 'もう一度押すと終了します'; + @override late final _Translations$common$ratingSource$ja ratingSource = _Translations$common$ratingSource$ja._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$ja extends Translations$settings$en { @override String get darkTheme => 'ダーク'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'ライブラリの密度'; + @override String get displayScale => '表示スケール'; @override String get compact => 'コンパクト'; @override String get comfortable => 'ゆったり'; @override String get tvCornerSpotlightBackdrop => '画面隅の注目コンテンツ背景'; @@ -287,6 +291,11 @@ class _Translations$settings$ja extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => '自動(推奨)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MBのメモリが利用可能です。${size}MBのバッファは再生に影響する可能性があります。'; + @override String get playbackBuffer => '再生バッファー'; + @override String get playbackBufferAuto => '自動(推奨)'; + @override String get playbackBufferLarge => '大'; + @override String get playbackBufferExtraLarge => '特大'; + @override String get playbackBufferDescription => '不安定な接続に備えてより多くのバッファーを使用します。バッファーサイズによっても制限されます。'; @override String get defaultQualityTitle => 'デフォルト画質'; @override String get musicQualityTitle => '音楽の音質'; @override String get subtitleStyling => '字幕スタイル'; @@ -320,6 +329,9 @@ class _Translations$settings$ja extends Translations$settings$en { @override String get debugLoggingDescription => 'トラブルシューティング用の詳細なログを有効化'; @override String get viewLogs => 'ログを表示'; @override String get viewLogsDescription => 'アプリケーションログを表示'; + @override String get clearImageCache => '画像キャッシュをクリア'; + @override String get clearImageCacheDescription => 'キャッシュされたアートワークとサムネイルをクリアします。再度ダウンロードされるまで画像の読み込みが遅くなる場合があります。'; + @override String get clearImageCacheSuccess => '画像キャッシュを正常にクリアしました'; @override String get resetSettings => '設定をリセット'; @override String get resetSettingsDescription => '設定を既定に戻します。元に戻せません。'; @override String get resetSettingsSuccess => '設定を正常にリセットしました'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$ja extends Translations$fileInfo$en { // Translations @override String get title => 'ファイル情報'; + @override String get overview => '概要'; @override String get video => '映像'; @override String get audio => '音声'; @override String get subtitles => '字幕'; + @override String get images => '埋め込み画像'; + @override String get dataStreams => 'データストリーム'; + @override String get lyrics => '歌詞'; @override String get file => 'ファイル'; + @override String get attachments => '添付ファイル'; + @override String get delivery => '配信'; + @override String versionCounter({required Object index, required Object count}) => 'バージョン ${index} / ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'ファイル ${index} / ${count}'; + @override String get noStreams => 'サーバーはこのファイルにストリームがないと報告しました。'; + @override String get copyPath => 'パスをコピー'; + @override String get pathCopied => 'ファイルパスをコピーしました'; @override String get codec => 'コーデック'; + @override String get codecTag => 'コーデックタグ'; @override String get resolution => '解像度'; + @override String get codedResolution => '符号化解像度'; @override String get bitrate => 'ビットレート'; @override String get frameRate => 'フレームレート'; + @override String get rotation => '回転'; + @override String get comment => 'コメント'; + @override String get audioDescription => '音声解説'; + @override String get headerCompression => 'ヘッダー圧縮'; + @override String get sidecarFile => 'サイドカーファイル'; + @override String get transportTimestamp => 'トランスポートタイムスタンプ'; + @override String get displayOffset => '表示オフセット'; + @override String get previewFailureCode => 'プレビュー失敗コード'; + @override String get previewRetries => 'プレビュー再試行回数'; @override String get aspectRatio => 'アスペクト比'; + @override String get pixelAspectRatio => 'ピクセルアスペクト比'; @override String get profile => 'プロファイル'; + @override String get level => 'レベル'; @override String get bitDepth => 'ビット深度'; + @override String get pixelFormat => 'ピクセルフォーマット'; @override String get colorSpace => '色空間'; @override String get colorRange => '色範囲'; @override String get colorPrimaries => '色原色'; + @override String get colorTransfer => 'カラートランスファー'; @override String get chromaSubsampling => 'クロマサブサンプリング'; + @override String get chromaLocation => 'クロマ位置'; + @override String get scanType => 'スキャンタイプ'; + @override String get interlaced => 'インターレース'; + @override String get anamorphic => 'アナモルフィック'; + @override String get referenceFrames => '参照フレーム数'; + @override String get dynamicRange => 'ダイナミックレンジ'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision レベル'; + @override String get dolbyVisionVersion => 'Dolby Vision バージョン'; + @override String get dolbyVisionLayers => 'Dolby Vision レイヤー'; + @override String get baseLayerCompatibility => 'ベースレイヤー互換性'; + @override String get avcBitstream => 'AVC ビットストリーム'; + @override String get nalLengthSize => 'NAL 長さサイズ'; + @override String get scalingMatrix => 'カスタムスケーリングマトリックス'; + @override String get streamIdentifier => 'ストリーム識別子'; + @override String get streamIndex => 'ストリームインデックス'; + @override String get streamId => 'ストリーム ID'; + @override String get language => '言語'; + @override String get languageCode => '言語コード'; + @override String get streamTitle => 'トラックタイトル'; @override String get channels => 'チャンネル'; + @override String get sampleRate => 'サンプルレート'; + @override String get spatialAudio => '空間オーディオ'; + @override String get textBased => 'テキストベース'; + @override String get subtitleFormat => 'サイドカーフォーマット'; + @override String get provider => 'プロバイダー'; + @override String get matchScore => '一致スコア'; + @override String get externalDelivery => '個別に配信可能'; + @override String get sidecarPath => 'サイドカーパス'; + @override String get sourceStream => 'コピー元'; + @override String get temporary => '一時的'; + @override String get timeBase => 'タイムベース'; @override String get overallBitrate => '全体ビットレート'; @override String get path => 'パス'; + @override String get fileName => 'ファイル名'; @override String get size => 'サイズ'; + @override String get totalSize => '合計サイズ'; @override String get container => 'コンテナ'; @override String get duration => '長さ'; + @override String get previewThumbnails => 'プレビューサムネイル'; + @override String get previewIndex => 'プレビューインデックス'; + @override String get packetLength => 'パケット長'; + @override String get filePresent => 'ファイルあり'; + @override String get fileReadable => 'サーバーから読み取り可能'; + @override String get streamPath => 'ストリームパス'; @override String get optimizedForStreaming => 'ストリーミング最適化'; @override String get has64bitOffsets => '64ビットオフセット'; + @override String get protocol => 'プロトコル'; + @override String get mediaType => 'メディアタイプ'; + @override String get sourceKind => 'ソース種別'; + @override String get optimizedVersion => '最適化バージョン'; + @override String get optimizationTarget => '最適化ターゲット'; + @override String get deletedAt => '削除済み'; + @override String get remoteSource => 'リモートソース'; + @override String get infiniteStream => '無限ストリーム'; + @override String get directPlay => 'ダイレクト再生'; + @override String get directStream => 'ダイレクトストリーム'; + @override String get transcoding => 'トランスコード'; + @override String get etag => 'ETag'; + @override String get versionId => 'バージョン ID'; + @override String get fileId => 'ファイル ID'; + @override String get defaultAudioTrack => 'デフォルト音声トラック'; + @override String get defaultSubtitleTrack => 'デフォルト字幕トラック'; + @override String get subtitlesOff => 'オフ'; + @override String get flagDefault => 'デフォルト'; + @override String get flagForced => '強制'; + @override String get flagSelected => '選択済み'; + @override String get flagExternal => '外部'; + @override String get flagHearingImpaired => '聴覚障害者向け'; + @override String get flagDub => '吹替'; + @override String get flagOriginal => 'オリジナル'; } // Path: mediaMenu @@ -546,7 +647,32 @@ class _Translations$mediaMenu$ja extends Translations$mediaMenu$en { @override String get shufflePlay => 'シャッフル再生'; @override String get shuffleNotAvailableOffline => 'オフラインではシャッフルを利用できません'; @override String get fileInfo => 'ファイル情報'; + @override String get deleteEpisodeFromServer => 'サーバーからエピソードを削除'; + @override String get deleteSeasonFromServer => 'サーバーからシーズンを削除'; + @override String get deleteShowFromServer => 'サーバーから番組を削除'; + @override String get deleteMovieFromServer => 'サーバーから映画を削除'; + @override String get deleteEpisodeTitle => 'このエピソードを削除しますか?'; + @override String get deleteSeasonTitle => 'このシーズンを削除しますか?'; + @override String get deleteShowTitle => 'この番組を削除しますか?'; + @override String get deleteMovieTitle => 'この映画を削除しますか?'; + @override String get deleteEpisodeConfirm => 'エピソードを削除'; + @override String get deleteSeasonConfirm => 'シーズンを削除'; + @override String get deleteShowConfirm => '番組を削除'; + @override String get deleteMovieConfirm => '映画を削除'; + @override String get deleteAnyway => 'それでも削除'; + @override String confirmDeleteTarget({required Object title}) => 'サーバーから「${title}」を完全に削除しますか?'; @override String get deleteMultipleWarning => 'すべてのエピソードとそのファイルが含まれます。'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + other: '中の全${n}エピソードとそのファイルが削除されます。', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + other: 'このアイテムは${n}個のファイルにまたがって保存されており、すべて削除されます。', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + other: '同じファイルに保存されている他の${n}エピソードも削除されます:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezyは削除対象のファイルを確認できなかったため、上記のアイテム以上に削除される可能性があります。キャンセルして再試行するか、それでも削除してください。'; + @override String get deleteScopeUnverifiedNoFileInfo => 'サーバーがこのアイテムのファイル情報を提供しなかったため、Plezyは削除対象のファイルを確認できません。上記のアイテム以上に削除される可能性があります。'; @override String get mediaDeletedSuccessfully => 'メディアアイテムを正常に削除しました'; @override String get mediaFailedToDelete => 'メディアアイテムの削除に失敗しました'; @override String get rate => '評価'; @@ -657,6 +783,9 @@ class _Translations$videoControls$ja extends Translations$videoControls$en { @override String get playNext => '次を再生'; @override String get playButton => '再生'; @override String get pauseButton => '一時停止'; + @override String get playbackPaused => '一時停止中'; + @override String get playbackResumed => '再生中'; + @override String get loadingVideo => '動画を読み込み中'; @override String get showPlaybackControls => '再生コントロールを表示'; @override String get hidePlaybackControls => '再生コントロールを非表示'; @override String seekBackwardButton({required Object seconds}) => '${seconds}秒戻る'; @@ -725,6 +854,7 @@ class _Translations$messages$ja extends Translations$messages$en { ); @override String get removedFromContinueWatching => '視聴中から削除しました'; @override String errorLoading({required Object error}) => 'エラー: ${error}'; + @override String get searchPartialResults => '一部のメディアサーバーを検索できませんでした。利用可能な結果を表示しています。'; @override String get streamInterrupted => 'ストリームが中断されました。再生を押すかシークして再試行してください。'; @override String get liveStreamInterrupted => 'ライブストリームが中断されました。再生を押して再試行してください。'; @override String get fileInfoNotAvailable => 'ファイル情報が利用できません'; @@ -763,6 +893,8 @@ class _Translations$messages$ja extends Translations$messages$en { @override String get switchingToCompatiblePlayer => '互換性のあるプレーヤーに切り替え中…'; @override String get serverLimitTitle => '再生に失敗しました'; @override String get serverLimitBody => 'サーバーエラー(HTTP 500)。帯域幅/トランスコード制限により拒否された可能性があります。所有者に調整を依頼してください。'; + @override String get mediaUnreadableTitle => 'ファイルを利用できません'; + @override String get mediaUnreadableBody => 'サーバーはこのアイテムを見つけましたが、そのファイルを読み取れませんでした(HTTP 404)。ファイルが移動・削除されたか、ストレージがオフラインの可能性があります。サーバーの管理者にファイルの確認とライブラリの再スキャンを依頼してください。'; @override String get logsUploaded => 'ログをアップロードしました'; @override String get logsUploadFailed => 'ログのアップロードに失敗しました'; @override String get logId => 'ログID'; @@ -916,6 +1048,8 @@ class _Translations$connections$ja extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => '${name} のセッションの有効期限が切れました'; @override String sessionExpiredMany({required Object count}) => '${count} 台のサーバーのセッションの有効期限が切れました'; @override String get signInAgain => '再度サインイン'; + @override String editMediaBrowserTitle({required Object product}) => '${product}接続を編集'; + @override String editMediaBrowserIntro({required Object serverName}) => '${serverName}のURLを追加または削除します。Plezyは到達可能なURLのうち、レイテンシーが最も低いものを使用します。'; } // Path: discover @@ -959,6 +1093,7 @@ class _Translations$errors$ja extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => '検索に失敗しました: ${error}'; + @override String get searchUnavailable => '検索中にメディアサーバーへ接続できませんでした。'; @override String connectionTimeout({required Object context}) => '${context}の読み込み中に接続がタイムアウトしました'; @override String get connectionFailed => 'メディアサーバーに接続できません'; @override String unableToLoad({required Object context}) => '${context}を読み込めませんでした。もう一度お試しください。'; @@ -1076,6 +1211,45 @@ class _Translations$logs$ja extends Translations$logs$en { @override String get uploadLogs => 'ログをアップロード'; } +// Path: startup +class _Translations$startup$ja extends Translations$startup$en { + _Translations$startup$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezyを起動できませんでした'; + @override String get failedBody => '起動中に問題が発生しました。以下の詳細に失敗の原因が示されています。'; + @override String get failedBodyRepairable => 'Plezyの保存済み設定ファイルが破損しているため、Plezyを起動する前に再構築する必要があります。再試行しても解決しません —「ストレージを修復」を選択してください。'; + @override String get phaseLabel => 'ステップ'; + @override String get showDetails => '詳細を表示'; + @override String get hideDetails => '詳細を非表示'; + @override String get copyDetails => '詳細をコピー'; + @override String get detailsCopied => '詳細をクリップボードにコピーしました'; + @override String get uploadDetails => '詳細をアップロード'; + @override String get repairStorage => 'ストレージを修復'; + @override String get repairTitle => '保存データを修復しますか?'; + @override String get repairBodyCommon => 'Plezyの設定ファイルが破損しており読み取れません。修復するとすべての設定がデフォルトにリセットされます。'; + @override String get repairBodyOneCredential => '保存済みのサインインの1つが破損しており読み取れません。修復するとその1つだけが削除され、他の設定には影響しません。'; + @override String get repairBodySignInsKept => 'サーバーとプロフィールはサインインしたままになります。'; + @override String get repairBodySignInsLost => '保存済みのサインインを保護するキーをこのファイルから復元できないため、すべてのサーバーとプロフィールに再度サインインする必要があります。メディアサーバー上のデータには影響ありません。'; + @override String get repairBodySessionsUncertain => 'トラッカー(MAL、AniList、Simkl、Trakt)とSeerrは別途保存されており、保持されるかどうかは不明です。Plezyは保持した内容を正確にお知らせします。'; + @override String get repairConfirm => '修復'; + @override String get repairSucceeded => 'ストレージを修復しました'; + @override String get repairNeedsRestart => 'ストレージを修復しました — 再起動が必要です'; + @override String get restartRequiredBody => 'データは修復されましたが、Plezyはそれを使用する前に再起動する必要があります。Plezyを閉じて再度開いてください。'; + @override String get quitPlezy => 'Plezyを終了'; + @override String get repairFailed => '修復に失敗しました'; + @override String get repairKeptSignIns => 'サーバーとプロフィールはサインインしたままです。'; + @override String get repairLostSignIns => '保存済みのサインインを保護するキーを復元できませんでした。すべてのサーバーとプロフィールに再度サインインする必要があります。'; + @override String get repairLostSessions => '少なくとも1つのトラッカーまたはSeerr接続が失われたため、再接続が必要です。'; + @override String get backupTitle => '破損したファイルのコピーを保持しました'; + @override String get backupWarning => 'このコピーにはサインイン資格情報が含まれています。アップロードや共有はしないでください。'; + @override String get deleteBackup => 'コピーを削除'; + @override String get backupDeleted => 'コピーを削除しました。'; + @override String get previousFailureTitle => '前回、Plezyは起動に失敗しました'; +} + // Path: licenses class _Translations$licenses$ja extends Translations$licenses$en { _Translations$licenses$ja._(TranslationsJa root) : this._root = root, super.internal(root); @@ -1130,6 +1304,19 @@ class _Translations$explore$ja extends Translations$explore$en { @override String searchEmpty({required Object query}) => '「${query}」の結果が見つかりません'; @override String searchPrompt({required Object source}) => '${source}で映画やテレビ番組を検索します。'; @override String get searchFailed => '検索に失敗しました。接続を確認してもう一度お試しください。'; + @override late final _Translations$explore$badge$ja badge = _Translations$explore$badge$ja._(_root); + @override late final _Translations$explore$stats$ja stats = _Translations$explore$stats$ja._(_root); + @override late final _Translations$explore$season$ja season = _Translations$explore$season$ja._(_root); + @override late final _Translations$explore$format$ja format = _Translations$explore$format$ja._(_root); + @override late final _Translations$explore$sourceMaterial$ja sourceMaterial = _Translations$explore$sourceMaterial$ja._(_root); + @override late final _Translations$explore$creditRole$ja creditRole = _Translations$explore$creditRole$ja._(_root); + @override late final _Translations$explore$relation$ja relation = _Translations$explore$relation$ja._(_root); + @override String broadcast({required Object day, required Object time}) => '${day} ${time}に放送'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '${day} ${time}(${timezone})に放送'; + @override late final _Translations$explore$detail$ja detail = _Translations$explore$detail$ja._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + other: '${n}件の結果', + ); } // Path: liveTv @@ -1436,9 +1623,15 @@ class _Translations$downloads$ja extends Translations$downloads$en { @override String get editSyncRule => '同期ルールを編集'; @override String get removeSyncRule => '同期ルールを削除'; @override String removeSyncRuleConfirm({required Object title}) => '「${title}」の同期を停止しますか?ダウンロード済みのエピソードは保持されます。'; + @override String removeListSyncRuleConfirm({required Object title}) => '「${title}」の同期を停止しますか?'; + @override String get deleteSyncRuleDownloads => '関連するダウンロードも削除'; + @override String get deleteSyncRuleDownloadsDescription => '別の同期ルールやプロフィールで使用されているダウンロードは保持されます。'; @override String syncRuleCreated({required Object count}) => '同期ルールを作成しました — 未視聴のエピソードを${count}件保持'; @override String get syncRuleUpdated => '同期ルールを更新しました'; @override String get syncRuleRemoved => '同期ルールを削除しました'; + @override String get syncRuleAndDownloadsRemoved => '同期ルールと関連するダウンロードを削除しました'; + @override String get syncRuleCleanupBusy => '同期ルールが更新中です。しばらくしてからもう一度お試しください。'; + @override String get syncRuleCleanupUnavailable => '関連するダウンロードを安全に特定できませんでした。サーバーに再接続して再試行するか、ダウンロードを削除せずにルールを削除してください。'; @override String syncedNewEpisodes({required Object title, required Object count}) => '${title}の新しいエピソードを${count}件同期しました'; @override String get activeSyncRules => '同期ルール'; @override String get noSyncRules => '同期ルールなし'; @@ -1796,9 +1989,12 @@ class _Translations$addServer$ja extends Translations$addServer$en { final TranslationsJa _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product}サーバーを追加'; @override String get serverUrls => 'サーバーURL'; @override String get serverUrlsHelper => '複数のURLをカンマ区切りで入力できます。'; @override String get findServer => 'サーバーを検索'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'ローカルの${product}サーバーを検索中…'; + @override String localMediaBrowserServers({required Object product}) => 'ローカルの${product}サーバー'; @override String get username => 'ユーザー名'; @override String get password => 'パスワード'; @override String get signIn => 'サインイン'; @@ -1810,15 +2006,39 @@ class _Translations$addServer$ja extends Translations$addServer$en { @override String get addPlexTitle => 'Plexでサインイン'; @override String get pinExpired => 'サインイン前にPINの有効期限が切れました。もう一度お試しください。'; @override String failedToRegisterAccount({required Object error}) => 'アカウントの登録に失敗しました: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '${product}サーバーのURLを入力してください'; @override String get addConnectionTitle => '接続を追加'; @override String addConnectionTitleScoped({required Object name}) => '${name}に追加'; @override String get signInWithPlexCard => 'Plexでサインイン'; @override String get signInWithPlexCardSubtitle => 'このデバイスを承認します。共有サーバーが追加されます。'; @override String get signInWithPlexCardSubtitleScoped => 'Plexアカウントを承認します。Homeユーザーはプロフィールになります。'; + @override String connectToMediaBrowserCard({required Object product}) => '${product}に接続'; + @override String get connectToMediaBrowserCardSubtitle => 'サーバーのURL、ユーザー名、パスワードを入力してください。'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '${product}サーバーにサインインします。「${name}」に紐付けられます。'; @override String get borrowFromAnotherProfile => '別のプロフィールの接続を利用'; @override String get borrowFromAnotherProfileSubtitle => '別のプロフィールの接続を再利用します。PINで保護されたプロフィールにはPINが必要です。'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$ja extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get critic => '批評家'; + @override String get audience => '観客'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes 批評家'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes 観客'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$ja extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$ja._(TranslationsJa root) : this._root = root, super.internal(root); @@ -1982,6 +2202,184 @@ class _Translations$explore$status$ja extends Translations$explore$status$en { @override String get upcoming => '放送予定'; } +// Path: explore.badge +class _Translations$explore$badge$ja extends Translations$explore$badge$en { + _Translations$explore$badge$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '人気 #${n}'; + @override String rankAiring({required Object n}) => '放送中 #${n}'; + @override String rankRated({required Object n}) => '評価 #${n}'; + @override String rankFavorited({required Object n}) => 'お気に入り #${n}'; + @override String rankTrending({required Object n}) => '急上昇 #${n}'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n}(${season})'; + @override String watchingNow({required Object n}) => '${n}人視聴中'; + @override String get available => '視聴可能'; + @override String get partiallyAvailable => '一部視聴可能'; + @override String get availableIn4k => '4K対応'; + @override String get requested => 'リクエスト済み'; + @override String get pendingApproval => '承認待ち'; + @override String get processing => '処理中'; + @override String get declined => '却下'; + @override String get requestFailed => 'リクエスト失敗'; + @override String get requested4k => '4Kリクエスト済み'; + @override String seasonsAvailable({required Object available, required Object total}) => 'シーズン ${available}/${total}'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'エピソード${episode} あと${duration}'; + @override String nextAiringIn({required Object duration}) => '次回 あと${duration}'; + @override String episodesShort({required Object n}) => '${n}話'; + @override String minutesPerEpisode({required Object n}) => '${n}分/話'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$ja extends Translations$explore$stats$en { + _Translations$explore$stats$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '登録者 ${n}人'; + @override String viewersDay({required Object n}) => '本日${n}人が視聴'; + @override String viewersWeek({required Object n}) => '今週${n}人が視聴'; + @override String viewersMonth({required Object n}) => '今月${n}人が視聴'; + @override String viewersYear({required Object n}) => '今年${n}人が視聴'; + @override String viewersAllTime({required Object n}) => '累計視聴者${n}人'; + @override String planning({required Object n}) => '${n}人が視聴予定'; + @override String favorited({required Object n}) => 'お気に入り ${n}件'; + @override String dropRate({required Object percent}) => '${percent}が視聴中止'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + other: 'コメント ${n}件', + ); + @override String votes({required Object n}) => '投票 ${n}件'; + @override String watching({required Object n}) => '${n}人が視聴中'; + @override String completed({required Object n}) => '${n}人が視聴済み'; + @override String onHold({required Object n}) => '${n}人が保留中'; + @override String dropped({required Object n}) => '${n}人が視聴中止'; +} + +// Path: explore.season +class _Translations$explore$season$ja extends Translations$explore$season$en { + _Translations$explore$season$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get winter => '冬'; + @override String get spring => '春'; + @override String get summer => '夏'; + @override String get fall => '秋'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$ja extends Translations$explore$format$en { + _Translations$explore$format$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV短編'; + @override String get movie => '映画'; + @override String get special => 'スペシャル'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => '音楽'; + @override String get other => 'その他'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$ja extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get original => 'オリジナル'; + @override String get manga => '漫画'; + @override String get lightNovel => 'ライトノベル'; + @override String get novel => '小説'; + @override String get visualNovel => 'ビジュアルノベル'; + @override String get game => 'ゲーム'; + @override String get webComic => 'Web漫画'; + @override String get musicRelease => '音楽'; + @override String get otherMedia => 'その他'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$ja extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get director => '監督'; + @override String get writer => '脚本'; + @override String get producer => 'プロデューサー'; + @override String get creator => '原作者'; + @override String get composer => '作曲家'; +} + +// Path: explore.relation +class _Translations$explore$relation$ja extends Translations$explore$relation$en { + _Translations$explore$relation$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get prequel => '前日譚'; + @override String get sequel => '続編'; + @override String get sideStory => 'サイドストーリー'; + @override String get spinOff => 'スピンオフ'; + @override String get alternativeVersion => '別バージョン'; + @override String get summary => '総集編'; + @override String get parentStory => '親作品'; + @override String get adaptation => '原作'; + @override String get other => '関連作品'; +} + +// Path: explore.detail +class _Translations$explore$detail$ja extends Translations$explore$detail$en { + _Translations$explore$detail$ja._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get originalTitle => '原題'; + @override String get alsoKnownAs => '別名'; + @override String get studios => '制作会社'; + @override String get country => '国'; + @override String get language => '言語'; + @override String get released => '公開日'; + @override String get physicalRelease => 'ディスク発売'; + @override String get ended => '放送終了'; + @override String addedOn({required Object date}) => '${date}に追加'; + @override String get yourRating => 'あなたの評価'; + @override String get budget => '制作費'; + @override String get revenue => '興行収入'; + @override String get contentAdvisory => '年齢区分'; + @override String get tags => 'タグ'; + @override String get revealSpoilerTags => 'ネタバレタグを表示'; + @override String get links => 'リンク'; + @override String get watchOn => '視聴先'; + @override String get watchTrailer => '予告編を見る'; + @override String openOn({required Object site}) => '${site}で開く'; + @override String get crew => 'スタッフ'; + @override String get ratings => '評価'; + @override String get schedule => '放送予定'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + other: '${n}人のユーザーがおすすめ', + ); + @override String recommendedBy({required Object who}) => '${who}がおすすめ'; + @override String favoritedBy({required Object who}) => '${who}がお気に入り登録'; + @override String unairedEpisodes({required Object n}) => '未放送 ${n}話'; + @override String recommendedByPercent({required Object percent}) => '視聴者の${percent}がおすすめ'; + @override String get relatedTitles => '関連作品'; + @override String get background => '背景'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$ja extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$ja._(TranslationsJa root) : this._root = root, super.internal(root); @@ -2125,6 +2523,7 @@ class _Translations$services$names$ja extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2194,6 +2593,7 @@ extension on TranslationsJa { 'auth.waitingForAuth' => '認証を待っています…\nブラウザでサインインしてください。', 'auth.useBrowser' => 'ブラウザを使用', 'auth.or' => 'または', + 'auth.connectToMediaBrowser' => ({required Object product}) => '${product}に接続', 'auth.useQuickConnect' => 'Quick Connect を使う', 'auth.quickConnectInstructions' => 'JellyfinでQuick Connectを開き、このコードを入力してください。', 'auth.quickConnectWaiting' => '承認を待っています…', @@ -2245,6 +2645,17 @@ extension on TranslationsJa { 'common.fullscreen' => 'フルスクリーン', 'common.exitFullscreen' => 'フルスクリーンを終了', 'common.pressBackAgainToExit' => 'もう一度押すと終了します', + 'common.ratingSource.critic' => '批評家', + 'common.ratingSource.audience' => '観客', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes 批評家', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes 観客', 'screens.licenses' => 'ライセンス', 'screens.switchProfile' => 'プロフィール切替', 'screens.subtitleStyling' => '字幕スタイル', @@ -2281,6 +2692,7 @@ extension on TranslationsJa { 'settings.darkTheme' => 'ダーク', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'ライブラリの密度', + 'settings.displayScale' => '表示スケール', 'settings.compact' => 'コンパクト', 'settings.comfortable' => 'ゆったり', 'settings.tvCornerSpotlightBackdrop' => '画面隅の注目コンテンツ背景', @@ -2330,6 +2742,11 @@ extension on TranslationsJa { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => '自動(推奨)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MBのメモリが利用可能です。${size}MBのバッファは再生に影響する可能性があります。', + 'settings.playbackBuffer' => '再生バッファー', + 'settings.playbackBufferAuto' => '自動(推奨)', + 'settings.playbackBufferLarge' => '大', + 'settings.playbackBufferExtraLarge' => '特大', + 'settings.playbackBufferDescription' => '不安定な接続に備えてより多くのバッファーを使用します。バッファーサイズによっても制限されます。', 'settings.defaultQualityTitle' => 'デフォルト画質', 'settings.musicQualityTitle' => '音楽の音質', 'settings.subtitleStyling' => '字幕スタイル', @@ -2363,6 +2780,9 @@ extension on TranslationsJa { 'settings.debugLoggingDescription' => 'トラブルシューティング用の詳細なログを有効化', 'settings.viewLogs' => 'ログを表示', 'settings.viewLogsDescription' => 'アプリケーションログを表示', + 'settings.clearImageCache' => '画像キャッシュをクリア', + 'settings.clearImageCacheDescription' => 'キャッシュされたアートワークとサムネイルをクリアします。再度ダウンロードされるまで画像の読み込みが遅くなる場合があります。', + 'settings.clearImageCacheSuccess' => '画像キャッシュを正常にクリアしました', 'settings.resetSettings' => '設定をリセット', 'settings.resetSettingsDescription' => '設定を既定に戻します。元に戻せません。', 'settings.resetSettingsSuccess' => '設定を正常にリセットしました', @@ -2546,29 +2966,118 @@ extension on TranslationsJa { 'hotkeys.actions.skipMarker' => 'イントロ/クレジットをスキップ', 'hotkeys.actions.screenshot' => 'スクリーンショットを撮る', 'fileInfo.title' => 'ファイル情報', + 'fileInfo.overview' => '概要', 'fileInfo.video' => '映像', 'fileInfo.audio' => '音声', 'fileInfo.subtitles' => '字幕', + 'fileInfo.images' => '埋め込み画像', + 'fileInfo.dataStreams' => 'データストリーム', + 'fileInfo.lyrics' => '歌詞', 'fileInfo.file' => 'ファイル', + 'fileInfo.attachments' => '添付ファイル', + 'fileInfo.delivery' => '配信', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'バージョン ${index} / ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'ファイル ${index} / ${count}', + 'fileInfo.noStreams' => 'サーバーはこのファイルにストリームがないと報告しました。', + 'fileInfo.copyPath' => 'パスをコピー', + 'fileInfo.pathCopied' => 'ファイルパスをコピーしました', 'fileInfo.codec' => 'コーデック', + 'fileInfo.codecTag' => 'コーデックタグ', 'fileInfo.resolution' => '解像度', + 'fileInfo.codedResolution' => '符号化解像度', 'fileInfo.bitrate' => 'ビットレート', 'fileInfo.frameRate' => 'フレームレート', + 'fileInfo.rotation' => '回転', + 'fileInfo.comment' => 'コメント', + 'fileInfo.audioDescription' => '音声解説', + 'fileInfo.headerCompression' => 'ヘッダー圧縮', + 'fileInfo.sidecarFile' => 'サイドカーファイル', + 'fileInfo.transportTimestamp' => 'トランスポートタイムスタンプ', + 'fileInfo.displayOffset' => '表示オフセット', + 'fileInfo.previewFailureCode' => 'プレビュー失敗コード', + 'fileInfo.previewRetries' => 'プレビュー再試行回数', 'fileInfo.aspectRatio' => 'アスペクト比', + 'fileInfo.pixelAspectRatio' => 'ピクセルアスペクト比', 'fileInfo.profile' => 'プロファイル', + 'fileInfo.level' => 'レベル', 'fileInfo.bitDepth' => 'ビット深度', + 'fileInfo.pixelFormat' => 'ピクセルフォーマット', 'fileInfo.colorSpace' => '色空間', 'fileInfo.colorRange' => '色範囲', 'fileInfo.colorPrimaries' => '色原色', + 'fileInfo.colorTransfer' => 'カラートランスファー', 'fileInfo.chromaSubsampling' => 'クロマサブサンプリング', + 'fileInfo.chromaLocation' => 'クロマ位置', + 'fileInfo.scanType' => 'スキャンタイプ', + 'fileInfo.interlaced' => 'インターレース', + 'fileInfo.anamorphic' => 'アナモルフィック', + 'fileInfo.referenceFrames' => '参照フレーム数', + 'fileInfo.dynamicRange' => 'ダイナミックレンジ', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision レベル', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision バージョン', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision レイヤー', + 'fileInfo.baseLayerCompatibility' => 'ベースレイヤー互換性', + 'fileInfo.avcBitstream' => 'AVC ビットストリーム', + 'fileInfo.nalLengthSize' => 'NAL 長さサイズ', + 'fileInfo.scalingMatrix' => 'カスタムスケーリングマトリックス', + 'fileInfo.streamIdentifier' => 'ストリーム識別子', + 'fileInfo.streamIndex' => 'ストリームインデックス', + 'fileInfo.streamId' => 'ストリーム ID', + 'fileInfo.language' => '言語', + 'fileInfo.languageCode' => '言語コード', + 'fileInfo.streamTitle' => 'トラックタイトル', 'fileInfo.channels' => 'チャンネル', + 'fileInfo.sampleRate' => 'サンプルレート', + 'fileInfo.spatialAudio' => '空間オーディオ', + 'fileInfo.textBased' => 'テキストベース', + 'fileInfo.subtitleFormat' => 'サイドカーフォーマット', + 'fileInfo.provider' => 'プロバイダー', + 'fileInfo.matchScore' => '一致スコア', + 'fileInfo.externalDelivery' => '個別に配信可能', + 'fileInfo.sidecarPath' => 'サイドカーパス', + 'fileInfo.sourceStream' => 'コピー元', + 'fileInfo.temporary' => '一時的', + 'fileInfo.timeBase' => 'タイムベース', 'fileInfo.overallBitrate' => '全体ビットレート', 'fileInfo.path' => 'パス', + 'fileInfo.fileName' => 'ファイル名', 'fileInfo.size' => 'サイズ', + 'fileInfo.totalSize' => '合計サイズ', 'fileInfo.container' => 'コンテナ', 'fileInfo.duration' => '長さ', + 'fileInfo.previewThumbnails' => 'プレビューサムネイル', + 'fileInfo.previewIndex' => 'プレビューインデックス', + 'fileInfo.packetLength' => 'パケット長', + 'fileInfo.filePresent' => 'ファイルあり', + 'fileInfo.fileReadable' => 'サーバーから読み取り可能', + 'fileInfo.streamPath' => 'ストリームパス', 'fileInfo.optimizedForStreaming' => 'ストリーミング最適化', 'fileInfo.has64bitOffsets' => '64ビットオフセット', + 'fileInfo.protocol' => 'プロトコル', + 'fileInfo.mediaType' => 'メディアタイプ', + 'fileInfo.sourceKind' => 'ソース種別', + 'fileInfo.optimizedVersion' => '最適化バージョン', + 'fileInfo.optimizationTarget' => '最適化ターゲット', + 'fileInfo.deletedAt' => '削除済み', + 'fileInfo.remoteSource' => 'リモートソース', + 'fileInfo.infiniteStream' => '無限ストリーム', + 'fileInfo.directPlay' => 'ダイレクト再生', + 'fileInfo.directStream' => 'ダイレクトストリーム', + 'fileInfo.transcoding' => 'トランスコード', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'バージョン ID', + 'fileInfo.fileId' => 'ファイル ID', + 'fileInfo.defaultAudioTrack' => 'デフォルト音声トラック', + 'fileInfo.defaultSubtitleTrack' => 'デフォルト字幕トラック', + 'fileInfo.subtitlesOff' => 'オフ', + 'fileInfo.flagDefault' => 'デフォルト', + 'fileInfo.flagForced' => '強制', + 'fileInfo.flagSelected' => '選択済み', + 'fileInfo.flagExternal' => '外部', + 'fileInfo.flagHearingImpaired' => '聴覚障害者向け', + 'fileInfo.flagDub' => '吹替', + 'fileInfo.flagOriginal' => 'オリジナル', 'mediaMenu.markAsWatched' => '視聴済みにする', 'mediaMenu.markAsUnwatched' => '未視聴にする', 'mediaMenu.removeFromContinueWatching' => '視聴中から削除', @@ -2577,7 +3086,28 @@ extension on TranslationsJa { 'mediaMenu.shufflePlay' => 'シャッフル再生', 'mediaMenu.shuffleNotAvailableOffline' => 'オフラインではシャッフルを利用できません', 'mediaMenu.fileInfo' => 'ファイル情報', + 'mediaMenu.deleteEpisodeFromServer' => 'サーバーからエピソードを削除', + 'mediaMenu.deleteSeasonFromServer' => 'サーバーからシーズンを削除', + 'mediaMenu.deleteShowFromServer' => 'サーバーから番組を削除', + 'mediaMenu.deleteMovieFromServer' => 'サーバーから映画を削除', + 'mediaMenu.deleteEpisodeTitle' => 'このエピソードを削除しますか?', + 'mediaMenu.deleteSeasonTitle' => 'このシーズンを削除しますか?', + 'mediaMenu.deleteShowTitle' => 'この番組を削除しますか?', + 'mediaMenu.deleteMovieTitle' => 'この映画を削除しますか?', + 'mediaMenu.deleteEpisodeConfirm' => 'エピソードを削除', + 'mediaMenu.deleteSeasonConfirm' => 'シーズンを削除', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => '番組を削除', + 'mediaMenu.deleteMovieConfirm' => '映画を削除', + 'mediaMenu.deleteAnyway' => 'それでも削除', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'サーバーから「${title}」を完全に削除しますか?', 'mediaMenu.deleteMultipleWarning' => 'すべてのエピソードとそのファイルが含まれます。', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '中の全${n}エピソードとそのファイルが削除されます。', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: 'このアイテムは${n}個のファイルにまたがって保存されており、すべて削除されます。', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '同じファイルに保存されている他の${n}エピソードも削除されます:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezyは削除対象のファイルを確認できなかったため、上記のアイテム以上に削除される可能性があります。キャンセルして再試行するか、それでも削除してください。', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'サーバーがこのアイテムのファイル情報を提供しなかったため、Plezyは削除対象のファイルを確認できません。上記のアイテム以上に削除される可能性があります。', 'mediaMenu.mediaDeletedSuccessfully' => 'メディアアイテムを正常に削除しました', 'mediaMenu.mediaFailedToDelete' => 'メディアアイテムの削除に失敗しました', 'mediaMenu.rate' => '評価', @@ -2643,6 +3173,9 @@ extension on TranslationsJa { 'videoControls.playNext' => '次を再生', 'videoControls.playButton' => '再生', 'videoControls.pauseButton' => '一時停止', + 'videoControls.playbackPaused' => '一時停止中', + 'videoControls.playbackResumed' => '再生中', + 'videoControls.loadingVideo' => '動画を読み込み中', 'videoControls.showPlaybackControls' => '再生コントロールを表示', 'videoControls.hidePlaybackControls' => '再生コントロールを非表示', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds}秒戻る', @@ -2697,8 +3230,6 @@ extension on TranslationsJa { 'videoControls.subtitleDownloaded' => '字幕をダウンロードしました', 'videoControls.subtitleDownloadedNotApplied' => '字幕はダウンロードされましたが、選択できませんでした', 'videoControls.subtitleDownloadFailed' => '字幕のダウンロードに失敗しました', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => '言語を検索…', 'messages.markedAsWatched' => '視聴済みにしました', 'messages.markedAsUnwatched' => '未視聴にしました', @@ -2708,6 +3239,7 @@ extension on TranslationsJa { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '視聴済みダウンロードを${n}件自動削除しました', ), 'messages.removedFromContinueWatching' => '視聴中から削除しました', 'messages.errorLoading' => ({required Object error}) => 'エラー: ${error}', + 'messages.searchPartialResults' => '一部のメディアサーバーを検索できませんでした。利用可能な結果を表示しています。', 'messages.streamInterrupted' => 'ストリームが中断されました。再生を押すかシークして再試行してください。', 'messages.liveStreamInterrupted' => 'ライブストリームが中断されました。再生を押して再試行してください。', 'messages.fileInfoNotAvailable' => 'ファイル情報が利用できません', @@ -2746,6 +3278,8 @@ extension on TranslationsJa { 'messages.switchingToCompatiblePlayer' => '互換性のあるプレーヤーに切り替え中…', 'messages.serverLimitTitle' => '再生に失敗しました', 'messages.serverLimitBody' => 'サーバーエラー(HTTP 500)。帯域幅/トランスコード制限により拒否された可能性があります。所有者に調整を依頼してください。', + 'messages.mediaUnreadableTitle' => 'ファイルを利用できません', + 'messages.mediaUnreadableBody' => 'サーバーはこのアイテムを見つけましたが、そのファイルを読み取れませんでした(HTTP 404)。ファイルが移動・削除されたか、ストレージがオフラインの可能性があります。サーバーの管理者にファイルの確認とライブラリの再スキャンを依頼してください。', 'messages.logsUploaded' => 'ログをアップロードしました', 'messages.logsUploadFailed' => 'ログのアップロードに失敗しました', 'messages.logId' => 'ログID', @@ -2854,6 +3388,8 @@ extension on TranslationsJa { 'connections.sessionExpiredOne' => ({required Object name}) => '${name} のセッションの有効期限が切れました', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} 台のサーバーのセッションの有効期限が切れました', 'connections.signInAgain' => '再度サインイン', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '${product}接続を編集', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '${serverName}のURLを追加または削除します。Plezyは到達可能なURLのうち、レイテンシーが最も低いものを使用します。', 'discover.title' => '探す', 'discover.noContentAvailable' => 'コンテンツがありません', 'discover.addMediaToLibraries' => 'ライブラリにメディアを追加してください', @@ -2879,6 +3415,7 @@ extension on TranslationsJa { 'discover.minutesLeft' => ({required Object minutes}) => '残り${minutes}分', 'discover.moreLikeThis' => '似ている作品', 'errors.searchFailed' => ({required Object error}) => '検索に失敗しました: ${error}', + 'errors.searchUnavailable' => '検索中にメディアサーバーへ接続できませんでした。', 'errors.connectionTimeout' => ({required Object context}) => '${context}の読み込み中に接続がタイムアウトしました', 'errors.connectionFailed' => 'メディアサーバーに接続できません', 'errors.unableToLoad' => ({required Object context}) => '${context}を読み込めませんでした。もう一度お試しください。', @@ -2986,6 +3523,36 @@ extension on TranslationsJa { 'logs.clearLogs' => 'ログをクリア', 'logs.copyLogs' => 'ログをコピー', 'logs.uploadLogs' => 'ログをアップロード', + 'startup.failedTitle' => 'Plezyを起動できませんでした', + 'startup.failedBody' => '起動中に問題が発生しました。以下の詳細に失敗の原因が示されています。', + 'startup.failedBodyRepairable' => 'Plezyの保存済み設定ファイルが破損しているため、Plezyを起動する前に再構築する必要があります。再試行しても解決しません —「ストレージを修復」を選択してください。', + 'startup.phaseLabel' => 'ステップ', + 'startup.showDetails' => '詳細を表示', + 'startup.hideDetails' => '詳細を非表示', + 'startup.copyDetails' => '詳細をコピー', + 'startup.detailsCopied' => '詳細をクリップボードにコピーしました', + 'startup.uploadDetails' => '詳細をアップロード', + 'startup.repairStorage' => 'ストレージを修復', + 'startup.repairTitle' => '保存データを修復しますか?', + 'startup.repairBodyCommon' => 'Plezyの設定ファイルが破損しており読み取れません。修復するとすべての設定がデフォルトにリセットされます。', + 'startup.repairBodyOneCredential' => '保存済みのサインインの1つが破損しており読み取れません。修復するとその1つだけが削除され、他の設定には影響しません。', + 'startup.repairBodySignInsKept' => 'サーバーとプロフィールはサインインしたままになります。', + 'startup.repairBodySignInsLost' => '保存済みのサインインを保護するキーをこのファイルから復元できないため、すべてのサーバーとプロフィールに再度サインインする必要があります。メディアサーバー上のデータには影響ありません。', + 'startup.repairBodySessionsUncertain' => 'トラッカー(MAL、AniList、Simkl、Trakt)とSeerrは別途保存されており、保持されるかどうかは不明です。Plezyは保持した内容を正確にお知らせします。', + 'startup.repairConfirm' => '修復', + 'startup.repairSucceeded' => 'ストレージを修復しました', + 'startup.repairNeedsRestart' => 'ストレージを修復しました — 再起動が必要です', + 'startup.restartRequiredBody' => 'データは修復されましたが、Plezyはそれを使用する前に再起動する必要があります。Plezyを閉じて再度開いてください。', + 'startup.quitPlezy' => 'Plezyを終了', + 'startup.repairFailed' => '修復に失敗しました', + 'startup.repairKeptSignIns' => 'サーバーとプロフィールはサインインしたままです。', + 'startup.repairLostSignIns' => '保存済みのサインインを保護するキーを復元できませんでした。すべてのサーバーとプロフィールに再度サインインする必要があります。', + 'startup.repairLostSessions' => '少なくとも1つのトラッカーまたはSeerr接続が失われたため、再接続が必要です。', + 'startup.backupTitle' => '破損したファイルのコピーを保持しました', + 'startup.backupWarning' => 'このコピーにはサインイン資格情報が含まれています。アップロードや共有はしないでください。', + 'startup.deleteBackup' => 'コピーを削除', + 'startup.backupDeleted' => 'コピーを削除しました。', + 'startup.previousFailureTitle' => '前回、Plezyは起動に失敗しました', 'licenses.relatedPackages' => '関連パッケージ', 'licenses.license' => 'ライセンス', 'licenses.licenseNumber' => ({required Object number}) => 'ライセンス ${number}', @@ -3029,6 +3596,113 @@ extension on TranslationsJa { 'explore.searchEmpty' => ({required Object query}) => '「${query}」の結果が見つかりません', 'explore.searchPrompt' => ({required Object source}) => '${source}で映画やテレビ番組を検索します。', 'explore.searchFailed' => '検索に失敗しました。接続を確認してもう一度お試しください。', + 'explore.badge.rankPopular' => ({required Object n}) => '人気 #${n}', + 'explore.badge.rankAiring' => ({required Object n}) => '放送中 #${n}', + 'explore.badge.rankRated' => ({required Object n}) => '評価 #${n}', + 'explore.badge.rankFavorited' => ({required Object n}) => 'お気に入り #${n}', + 'explore.badge.rankTrending' => ({required Object n}) => '急上昇 #${n}', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n}(${season})', + 'explore.badge.watchingNow' => ({required Object n}) => '${n}人視聴中', + 'explore.badge.available' => '視聴可能', + 'explore.badge.partiallyAvailable' => '一部視聴可能', + 'explore.badge.availableIn4k' => '4K対応', + 'explore.badge.requested' => 'リクエスト済み', + 'explore.badge.pendingApproval' => '承認待ち', + 'explore.badge.processing' => '処理中', + 'explore.badge.declined' => '却下', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'リクエスト失敗', + 'explore.badge.requested4k' => '4Kリクエスト済み', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => 'シーズン ${available}/${total}', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'エピソード${episode} あと${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => '次回 あと${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n}話', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n}分/話', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '登録者 ${n}人', + 'explore.stats.viewersDay' => ({required Object n}) => '本日${n}人が視聴', + 'explore.stats.viewersWeek' => ({required Object n}) => '今週${n}人が視聴', + 'explore.stats.viewersMonth' => ({required Object n}) => '今月${n}人が視聴', + 'explore.stats.viewersYear' => ({required Object n}) => '今年${n}人が視聴', + 'explore.stats.viewersAllTime' => ({required Object n}) => '累計視聴者${n}人', + 'explore.stats.planning' => ({required Object n}) => '${n}人が視聴予定', + 'explore.stats.favorited' => ({required Object n}) => 'お気に入り ${n}件', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent}が視聴中止', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: 'コメント ${n}件', ), + 'explore.stats.votes' => ({required Object n}) => '投票 ${n}件', + 'explore.stats.watching' => ({required Object n}) => '${n}人が視聴中', + 'explore.stats.completed' => ({required Object n}) => '${n}人が視聴済み', + 'explore.stats.onHold' => ({required Object n}) => '${n}人が保留中', + 'explore.stats.dropped' => ({required Object n}) => '${n}人が視聴中止', + 'explore.season.winter' => '冬', + 'explore.season.spring' => '春', + 'explore.season.summer' => '夏', + 'explore.season.fall' => '秋', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV短編', + 'explore.format.movie' => '映画', + 'explore.format.special' => 'スペシャル', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => '音楽', + 'explore.format.other' => 'その他', + 'explore.sourceMaterial.original' => 'オリジナル', + 'explore.sourceMaterial.manga' => '漫画', + 'explore.sourceMaterial.lightNovel' => 'ライトノベル', + 'explore.sourceMaterial.novel' => '小説', + 'explore.sourceMaterial.visualNovel' => 'ビジュアルノベル', + 'explore.sourceMaterial.game' => 'ゲーム', + 'explore.sourceMaterial.webComic' => 'Web漫画', + 'explore.sourceMaterial.musicRelease' => '音楽', + 'explore.sourceMaterial.otherMedia' => 'その他', + 'explore.creditRole.director' => '監督', + 'explore.creditRole.writer' => '脚本', + 'explore.creditRole.producer' => 'プロデューサー', + 'explore.creditRole.creator' => '原作者', + 'explore.creditRole.composer' => '作曲家', + 'explore.relation.prequel' => '前日譚', + 'explore.relation.sequel' => '続編', + 'explore.relation.sideStory' => 'サイドストーリー', + 'explore.relation.spinOff' => 'スピンオフ', + 'explore.relation.alternativeVersion' => '別バージョン', + 'explore.relation.summary' => '総集編', + 'explore.relation.parentStory' => '親作品', + 'explore.relation.adaptation' => '原作', + 'explore.relation.other' => '関連作品', + 'explore.broadcast' => ({required Object day, required Object time}) => '${day} ${time}に放送', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '${day} ${time}(${timezone})に放送', + 'explore.detail.originalTitle' => '原題', + 'explore.detail.alsoKnownAs' => '別名', + 'explore.detail.studios' => '制作会社', + 'explore.detail.country' => '国', + 'explore.detail.language' => '言語', + 'explore.detail.released' => '公開日', + 'explore.detail.physicalRelease' => 'ディスク発売', + 'explore.detail.ended' => '放送終了', + 'explore.detail.addedOn' => ({required Object date}) => '${date}に追加', + 'explore.detail.yourRating' => 'あなたの評価', + 'explore.detail.budget' => '制作費', + 'explore.detail.revenue' => '興行収入', + 'explore.detail.contentAdvisory' => '年齢区分', + 'explore.detail.tags' => 'タグ', + 'explore.detail.revealSpoilerTags' => 'ネタバレタグを表示', + 'explore.detail.links' => 'リンク', + 'explore.detail.watchOn' => '視聴先', + 'explore.detail.watchTrailer' => '予告編を見る', + 'explore.detail.openOn' => ({required Object site}) => '${site}で開く', + 'explore.detail.crew' => 'スタッフ', + 'explore.detail.ratings' => '評価', + 'explore.detail.schedule' => '放送予定', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '${n}人のユーザーがおすすめ', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '${who}がおすすめ', + 'explore.detail.favoritedBy' => ({required Object who}) => '${who}がお気に入り登録', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '未放送 ${n}話', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => '視聴者の${percent}がおすすめ', + 'explore.detail.relatedTitles' => '関連作品', + 'explore.detail.background' => '背景', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '${n}件の結果', ), 'liveTv.title' => 'ライブTV', 'liveTv.guide' => '番組表', 'liveTv.noChannels' => 'チャンネルがありません', @@ -3211,8 +3885,6 @@ extension on TranslationsJa { 'watchTogether.relayUnreachable' => 'リレーサーバーに接続できません。ISPによるブロックのため「一緒に見る」を利用できない可能性があります。', 'watchTogether.reconnectingToHost' => 'ホストに再接続中…', 'watchTogether.currentPlayback' => '現在の再生', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => '現在の再生に参加', 'watchTogether.joinCurrentPlaybackDescription' => 'ホストが現在視聴中のコンテンツに戻る', 'watchTogether.failedToOpenCurrentPlayback' => '現在の再生を開けませんでした', @@ -3281,9 +3953,15 @@ extension on TranslationsJa { 'downloads.editSyncRule' => '同期ルールを編集', 'downloads.removeSyncRule' => '同期ルールを削除', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => '「${title}」の同期を停止しますか?ダウンロード済みのエピソードは保持されます。', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => '「${title}」の同期を停止しますか?', + 'downloads.deleteSyncRuleDownloads' => '関連するダウンロードも削除', + 'downloads.deleteSyncRuleDownloadsDescription' => '別の同期ルールやプロフィールで使用されているダウンロードは保持されます。', 'downloads.syncRuleCreated' => ({required Object count}) => '同期ルールを作成しました — 未視聴のエピソードを${count}件保持', 'downloads.syncRuleUpdated' => '同期ルールを更新しました', 'downloads.syncRuleRemoved' => '同期ルールを削除しました', + 'downloads.syncRuleAndDownloadsRemoved' => '同期ルールと関連するダウンロードを削除しました', + 'downloads.syncRuleCleanupBusy' => '同期ルールが更新中です。しばらくしてからもう一度お試しください。', + 'downloads.syncRuleCleanupUnavailable' => '関連するダウンロードを安全に特定できませんでした。サーバーに再接続して再試行するか、ダウンロードを削除せずにルールを削除してください。', 'downloads.syncedNewEpisodes' => ({required Object title, required Object count}) => '${title}の新しいエピソードを${count}件同期しました', 'downloads.activeSyncRules' => '同期ルール', 'downloads.noSyncRules' => '同期ルールなし', @@ -3446,6 +4124,8 @@ extension on TranslationsJa { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'DV RPU 平均', 'performanceOverlay.dvSampleAverage' => 'DV サンプル平均', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => '最大輝度', 'performanceOverlay.minLuma' => '最小輝度', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3615,6 +4295,7 @@ extension on TranslationsJa { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => '${service} で Plezy を有効化', 'services.deviceCode.body' => ({required Object url}) => '${url}にアクセスして、このコードを入力してください。', 'services.deviceCode.openToActivate' => ({required Object service}) => '${service} を開いて有効化', @@ -3638,9 +4319,12 @@ extension on TranslationsJa { 'services.libraryFilter.modeHintWhitelist' => '下でチェックしたライブラリのみ同期します。', 'services.libraryFilter.libraries' => 'ライブラリ', 'services.libraryFilter.noLibraries' => '利用できるライブラリがありません', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product}サーバーを追加', 'addServer.serverUrls' => 'サーバーURL', 'addServer.serverUrlsHelper' => '複数のURLをカンマ区切りで入力できます。', 'addServer.findServer' => 'サーバーを検索', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'ローカルの${product}サーバーを検索中…', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'ローカルの${product}サーバー', 'addServer.username' => 'ユーザー名', 'addServer.password' => 'パスワード', 'addServer.signIn' => 'サインイン', @@ -3652,11 +4336,15 @@ extension on TranslationsJa { 'addServer.addPlexTitle' => 'Plexでサインイン', 'addServer.pinExpired' => 'サインイン前にPINの有効期限が切れました。もう一度お試しください。', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'アカウントの登録に失敗しました: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '${product}サーバーのURLを入力してください', 'addServer.addConnectionTitle' => '接続を追加', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name}に追加', 'addServer.signInWithPlexCard' => 'Plexでサインイン', 'addServer.signInWithPlexCardSubtitle' => 'このデバイスを承認します。共有サーバーが追加されます。', 'addServer.signInWithPlexCardSubtitleScoped' => 'Plexアカウントを承認します。Homeユーザーはプロフィールになります。', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '${product}に接続', + 'addServer.connectToMediaBrowserCardSubtitle' => 'サーバーのURL、ユーザー名、パスワードを入力してください。', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '${product}サーバーにサインインします。「${name}」に紐付けられます。', 'addServer.borrowFromAnotherProfile' => '別のプロフィールの接続を利用', 'addServer.borrowFromAnotherProfileSubtitle' => '別のプロフィールの接続を再利用します。PINで保護されたプロフィールにはPINが必要です。', _ => null, diff --git a/lib/i18n/strings_kk.g.dart b/lib/i18n/strings_kk.g.dart index 4aa4ca2c..242011eb 100644 --- a/lib/i18n/strings_kk.g.dart +++ b/lib/i18n/strings_kk.g.dart @@ -67,6 +67,7 @@ class TranslationsKk extends Translations with BaseTranslations 'Растау күтілуде...\nБраузеріңізден кіріңіз.'; @override String get useBrowser => 'Браузерді пайдалану'; @override String get or => 'немесе'; + @override String connectToMediaBrowser({required Object product}) => '${product} қосылу'; @override String get useQuickConnect => 'Жылдам қосылуды пайдалану'; @override String get quickConnectInstructions => 'Jellyfin-де Жылдам қосылуды ашып, осы кодты енгізіңіз.'; @override String get quickConnectWaiting => 'Растау күтілуде…'; @@ -175,6 +177,7 @@ class _Translations$common$kk extends Translations$common$en { @override String get fullscreen => 'Толық экран'; @override String get exitFullscreen => 'Толық экраннан шығу'; @override String get pressBackAgainToExit => 'Шығу үшін артқа түймесін қайтадан басыңыз'; + @override late final _Translations$common$ratingSource$kk ratingSource = _Translations$common$ratingSource$kk._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$kk extends Translations$settings$en { @override String get darkTheme => 'Қараңғы'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Кітапхана тығыздығы'; + @override String get displayScale => 'Дисплей масштабы'; @override String get compact => 'Тығыз'; @override String get comfortable => 'Ыңғайлы'; @override String get tvCornerSpotlightBackdrop => 'Бұрыштық жарық фоны'; @@ -287,6 +291,11 @@ class _Translations$settings$kk extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} МБ'; @override String get bufferSizeAuto => 'Автоматты (Ұсынылатын)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} МБ ЖҰД қолжетімді. ${size} МБ буфер ойнатуға әсер етуі мүмкін.'; + @override String get playbackBuffer => 'Ойнату буфері'; + @override String get playbackBufferAuto => 'Авто (ұсынылады)'; + @override String get playbackBufferLarge => 'Үлкен'; + @override String get playbackBufferExtraLarge => 'Өте үлкен'; + @override String get playbackBufferDescription => 'Тұрақсыз қосылыстарға қарсы көбірек буферлейді. Буфер өлшемімен де шектеледі.'; @override String get defaultQualityTitle => 'Әдепкі сапа'; @override String get musicQualityTitle => 'Музыка сапасы'; @override String get subtitleStyling => 'Субтитр баптаулары'; @@ -509,29 +518,118 @@ class _Translations$fileInfo$kk extends Translations$fileInfo$en { // Translations @override String get title => 'Файл туралы ақпарат'; + @override String get overview => 'Шолу'; @override String get video => 'Видео'; @override String get audio => 'Аудио'; @override String get subtitles => 'Субтитрлер'; + @override String get images => 'Кірістірілген суреттер'; + @override String get dataStreams => 'Деректер ағындары'; + @override String get lyrics => 'Ән мәтіні'; @override String get file => 'Файл'; + @override String get attachments => 'Тіркемелер'; + @override String get delivery => 'Жеткізу'; + @override String versionCounter({required Object index, required Object count}) => 'Нұсқа ${index} / ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Файл ${index} / ${count}'; + @override String get noStreams => 'Сервер бұл файл үшін ағындар жоқ деп хабарлады.'; + @override String get copyPath => 'Жолды көшіру'; + @override String get pathCopied => 'Файл жолы көшірілді'; @override String get codec => 'Кодек'; + @override String get codecTag => 'Кодек тегі'; @override String get resolution => 'Ажыратымдылық'; + @override String get codedResolution => 'Кодталған ажыратымдылық'; @override String get bitrate => 'Биттік жылдамдық (Bitrate)'; @override String get frameRate => 'Кадр жиілігі'; + @override String get rotation => 'Бұрылыс'; + @override String get comment => 'Пікір'; + @override String get audioDescription => 'Аудио сипаттама'; + @override String get headerCompression => 'Тақырып қысуы'; + @override String get sidecarFile => 'Қосалқы файл'; + @override String get transportTimestamp => 'Транспорт уақыт белгісі'; + @override String get displayOffset => 'Көрсету ығысуы'; + @override String get previewFailureCode => 'Алдын ала қарау қате коды'; + @override String get previewRetries => 'Алдын ала қарау қайталаулары'; @override String get aspectRatio => 'Тараптар қатынасы'; + @override String get pixelAspectRatio => 'Пиксель пропорциясы'; @override String get profile => 'Профиль'; + @override String get level => 'Деңгей'; @override String get bitDepth => 'Бит тереңдігі'; + @override String get pixelFormat => 'Пиксель форматы'; @override String get colorSpace => 'Түс кеңістігі'; @override String get colorRange => 'Түс диапазоны'; @override String get colorPrimaries => 'Негізгі түстер'; + @override String get colorTransfer => 'Түс тасымалдауы'; @override String get chromaSubsampling => 'Түстік субдискретизация'; + @override String get chromaLocation => 'Chroma орналасуы'; + @override String get scanType => 'Сканерлеу түрі'; + @override String get interlaced => 'Жоларалық'; + @override String get anamorphic => 'Анаморфты'; + @override String get referenceFrames => 'Тірек кадрлар'; + @override String get dynamicRange => 'Динамикалық диапазон'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision деңгейі'; + @override String get dolbyVisionVersion => 'Dolby Vision нұсқасы'; + @override String get dolbyVisionLayers => 'Dolby Vision қабаттары'; + @override String get baseLayerCompatibility => 'Базалық қабат үйлесімділігі'; + @override String get avcBitstream => 'AVC бит ағыны'; + @override String get nalLengthSize => 'NAL ұзындық өлшемі'; + @override String get scalingMatrix => 'Теңшелетін масштабтау матрицасы'; + @override String get streamIdentifier => 'Ағын идентификаторы'; + @override String get streamIndex => 'Ағын индексі'; + @override String get streamId => 'Ағын ID'; + @override String get language => 'Тіл'; + @override String get languageCode => 'Тіл коды'; + @override String get streamTitle => 'Трек атауы'; @override String get channels => 'Арналар'; + @override String get sampleRate => 'Дискретизация жиілігі'; + @override String get spatialAudio => 'Кеңістіктік аудио'; + @override String get textBased => 'Мәтіндік'; + @override String get subtitleFormat => 'Қосалқы формат'; + @override String get provider => 'Провайдер'; + @override String get matchScore => 'Сәйкестік ұпайы'; + @override String get externalDelivery => 'Бөлек жеткізілуі мүмкін'; + @override String get sidecarPath => 'Қосалқы файл жолы'; + @override String get sourceStream => 'Көшірілген көзі'; + @override String get temporary => 'Уақытша'; + @override String get timeBase => 'Уақыт негізі'; @override String get overallBitrate => 'Жалпы биттік жылдамдық'; @override String get path => 'Жол'; + @override String get fileName => 'Файл атауы'; @override String get size => 'Көлемі'; + @override String get totalSize => 'Жалпы өлшемі'; @override String get container => 'Контейнер'; @override String get duration => 'Уақыты'; + @override String get previewThumbnails => 'Алдын ала қарау суреттері'; + @override String get previewIndex => 'Алдын ала қарау индексі'; + @override String get packetLength => 'Пакет ұзындығы'; + @override String get filePresent => 'Файл бар'; + @override String get fileReadable => 'Сервер оқи алады'; + @override String get streamPath => 'Ағын жолы'; @override String get optimizedForStreaming => 'Ағынды беру үшін оңтайландырылған'; @override String get has64bitOffsets => '64-биттік ығысулар'; + @override String get protocol => 'Протокол'; + @override String get mediaType => 'Медиа түрі'; + @override String get sourceKind => 'Дереккөз түрі'; + @override String get optimizedVersion => 'Оңтайландырылған нұсқа'; + @override String get optimizationTarget => 'Оңтайландыру мақсаты'; + @override String get deletedAt => 'Өшірілген'; + @override String get remoteSource => 'Қашықтағы дереккөз'; + @override String get infiniteStream => 'Шексіз ағын'; + @override String get directPlay => 'Тікелей ойнату'; + @override String get directStream => 'Тікелей ағын'; + @override String get transcoding => 'Транскодтау'; + @override String get etag => 'ETag'; + @override String get versionId => 'Нұсқа ID'; + @override String get fileId => 'Файл ID'; + @override String get defaultAudioTrack => 'Әдепкі аудио трек'; + @override String get defaultSubtitleTrack => 'Әдепкі субтитр трегі'; + @override String get subtitlesOff => 'Өшірулі'; + @override String get flagDefault => 'Әдепкі'; + @override String get flagForced => 'Мәжбүрлі'; + @override String get flagSelected => 'Таңдалған'; + @override String get flagExternal => 'Сыртқы'; + @override String get flagHearingImpaired => 'Есту қабілеті бұзылғандар үшін'; + @override String get flagDub => 'Дубляж'; + @override String get flagOriginal => 'Түпнұсқа'; } // Path: mediaMenu @@ -549,7 +647,35 @@ class _Translations$mediaMenu$kk extends Translations$mediaMenu$en { @override String get shufflePlay => 'Араластырып ойнату'; @override String get shuffleNotAvailableOffline => 'Араластырып ойнату офлайн режимде қолжетімсіз'; @override String get fileInfo => 'Файл туралы ақпарат'; + @override String get deleteEpisodeFromServer => 'Бөлімді серверден өшіру'; + @override String get deleteSeasonFromServer => 'Маусымды серверден өшіру'; + @override String get deleteShowFromServer => 'Сериалды серверден өшіру'; + @override String get deleteMovieFromServer => 'Фильмді серверден өшіру'; + @override String get deleteEpisodeTitle => 'Осы бөлім өшірілсін бе?'; + @override String get deleteSeasonTitle => 'Осы маусым өшірілсін бе?'; + @override String get deleteShowTitle => 'Осы сериал өшірілсін бе?'; + @override String get deleteMovieTitle => 'Осы фильм өшірілсін бе?'; + @override String get deleteEpisodeConfirm => 'Бөлімді өшіру'; + @override String get deleteSeasonConfirm => 'Маусымды өшіру'; + @override String get deleteShowConfirm => 'Сериалды өшіру'; + @override String get deleteMovieConfirm => 'Фильмді өшіру'; + @override String get deleteAnyway => 'Бәрібір өшіру'; + @override String confirmDeleteTarget({required Object title}) => '${title} серверіңізден толық өшірілсін бе?'; @override String get deleteMultipleWarning => 'Бұл барлық бөлімдер мен файлдарға әсер етеді.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, + one: 'Бұл ондағы ${n} бөлімді және оның файлын өшіреді.', + other: 'Бұл ондағы барлық ${n} бөлімді және олардың файлдарын өшіреді.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, + one: 'Бұл элемент ${n} файл ретінде сақталған, ол өшіріледі.', + other: 'Бұл элемент ${n} файлда сақталған, олардың барлығы өшіріледі.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, + one: 'Сол файлда тағы ${n} бөлім сақталған, ол да өшіріледі:', + other: 'Сол файлда тағы ${n} бөлім сақталған, олар да өшіріледі:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy қандай файлдар өшірілетінін тексере алмады, сондықтан ол жоғарыда аталған элементтен артық өшіруі мүмкін. Бас тартып, қайталап көріңіз немесе бәрібір өшіріңіз.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Серверіңіз бұл элемент үшін файл мәліметтерін ұсынбады, сондықтан Plezy қандай файлдар өшірілетінін тексере алмайды. Ол жоғарыда аталған элементтен артық өшіруі мүмкін.'; @override String get mediaDeletedSuccessfully => 'Медиа элементі сәтті өшірілді'; @override String get mediaFailedToDelete => 'Медиа элементін өшіру мүмкін болмады'; @override String get rate => 'Бағалау'; @@ -660,6 +786,9 @@ class _Translations$videoControls$kk extends Translations$videoControls$en { @override String get playNext => 'Келесіні ойнату'; @override String get playButton => 'Ойнату'; @override String get pauseButton => 'Кідірту'; + @override String get playbackPaused => 'Кідіртілді'; + @override String get playbackResumed => 'Ойнатылуда'; + @override String get loadingVideo => 'Бейне жүктелуде'; @override String get showPlaybackControls => 'Басқару элементтерін көрсету'; @override String get hidePlaybackControls => 'Басқару элементтерін жасыру'; @override String seekBackwardButton({required Object seconds}) => '${seconds} секунд артқа айналдыру'; @@ -768,6 +897,8 @@ class _Translations$messages$kk extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Үйлесімді ойнатқышқа ауысуда...'; @override String get serverLimitTitle => 'Ойнату қатесі'; @override String get serverLimitBody => 'Сервер қатесі (HTTP 500). Шектеу бұл сеансты қабылдамады.'; + @override String get mediaUnreadableTitle => 'Файл қолжетімсіз'; + @override String get mediaUnreadableBody => 'Сервер бұл элементті тапты, бірақ оның файлын оқи алмады (HTTP 404). Файл жылжытылған, өшірілген немесе оның сақтау орны қолжетімсіз болуы мүмкін. Сервер иесінен файлды тексеріп, кітапхананы қайта сканерлеуді сұраңыз.'; @override String get logsUploaded => 'Журналдар жүктелді'; @override String get logsUploadFailed => 'Журналдарды жүктеу мүмкін болмады'; @override String get logId => 'Журнал ID-сі'; @@ -921,6 +1052,8 @@ class _Translations$connections$kk extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => '${name} үшін сеанс мерзімі өтті'; @override String sessionExpiredMany({required Object count}) => '${count} сервер үшін сеанс мерзімі өтті'; @override String get signInAgain => 'Қайтадан кіру'; + @override String editMediaBrowserTitle({required Object product}) => '${product} қосылымын өңдеу'; + @override String editMediaBrowserIntro({required Object serverName}) => '${serverName} үшін URL мекенжайларды қосыңыз немесе өшіріңіз. Plezy ең төмен кідірісі бар қолжетімді URL мекенжайды пайдаланады.'; } // Path: discover @@ -1082,6 +1215,45 @@ class _Translations$logs$kk extends Translations$logs$en { @override String get uploadLogs => 'Журналдарды жүктеу'; } +// Path: startup +class _Translations$startup$kk extends Translations$startup$en { + _Translations$startup$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy іске қосылмады'; + @override String get failedBody => 'Іске қосу кезінде қате орын алды. Төмендегі мәліметтер ненің сәтсіз аяқталғанын көрсетеді.'; + @override String get failedBodyRepairable => 'Plezy сақталған баптаулар файлы зақымдалған және Plezy іске қосылмас бұрын оны қайта құру қажет. Қайталау көмектеспейді — «Сақтауды қалпына келтіру» тармағын таңдаңыз.'; + @override String get phaseLabel => 'Қадам'; + @override String get showDetails => 'Мәліметтерді көрсету'; + @override String get hideDetails => 'Мәліметтерді жасыру'; + @override String get copyDetails => 'Мәліметтерді көшіру'; + @override String get detailsCopied => 'Мәліметтер алмасу буферіне көшірілді'; + @override String get uploadDetails => 'Мәліметтерді жүктеп жіберу'; + @override String get repairStorage => 'Сақтауды қалпына келтіру'; + @override String get repairTitle => 'Сақталған деректер қалпына келтірілсін бе?'; + @override String get repairBodyCommon => 'Plezy баптаулар файлы зақымдалған және оқылмайды. Қалпына келтіру барлық баптауды әдепкі мәнге қайтарады.'; + @override String get repairBodyOneCredential => 'Бір сақталған кіру деректері зақымдалған және оқылмайды. Қалпына келтіру тек соны өшіреді; қалған баптауларыңызға тиіспейді.'; + @override String get repairBodySignInsKept => 'Серверлеріңіз бен профильдеріңіз кірген күйінде қалады.'; + @override String get repairBodySignInsLost => 'Сақталған кіру деректерін қорғайтын кілт осы файлдан қалпына келтірілмейді, сондықтан әрбір сервер мен профильге қайта кіруге тура келеді. Медиа серверіңіздегі ештеңеге әсер етілмейді.'; + @override String get repairBodySessionsUncertain => 'Tracker-лар (MAL, AniList, Simkl, Trakt) және Seerr бөлек сақталады және сақталуы да, сақталмауы да мүмкін. Plezy не сақталғанын нақты айтады.'; + @override String get repairConfirm => 'Қалпына келтіру'; + @override String get repairSucceeded => 'Сақтау қалпына келтірілді'; + @override String get repairNeedsRestart => 'Сақтау қалпына келтірілді — қайта іске қосу қажет'; + @override String get restartRequiredBody => 'Деректеріңіз қалпына келтірілді, бірақ Plezy оларды пайдаланар алдында жаңадан іске қосылуы керек. Plezy жабыңыз да, қайта ашыңыз.'; + @override String get quitPlezy => 'Plezy бағдарламасынан шығу'; + @override String get repairFailed => 'Қалпына келтіру сәтсіз аяқталды'; + @override String get repairKeptSignIns => 'Серверлеріңіз бен профильдеріңіз әлі кірген күйде.'; + @override String get repairLostSignIns => 'Сақталған кіру деректерін қорғайтын кілт қалпына келтірілмеді. Әрбір сервер мен профильге қайта кіруге тура келеді.'; + @override String get repairLostSessions => 'Кем дегенде бір tracker немесе Seerr қосылымы жоғалды, оны қайта қосу қажет.'; + @override String get backupTitle => 'Зақымдалған файлдың көшірмесі сақталды'; + @override String get backupWarning => 'Онда сіздің кіру деректеріңіз бар. Оны жүктеп жібермеңіз немесе бөліспеңіз.'; + @override String get deleteBackup => 'Көшірмені өшіру'; + @override String get backupDeleted => 'Көшірме өшірілді.'; + @override String get previousFailureTitle => 'Plezy соңғы рет іске қосыла алмады'; +} + // Path: licenses class _Translations$licenses$kk extends Translations$licenses$en { _Translations$licenses$kk._(TranslationsKk root) : this._root = root, super.internal(root); @@ -1137,6 +1309,20 @@ class _Translations$explore$kk extends Translations$explore$en { @override String searchEmpty({required Object query}) => '"${query}" бойынша нәтиже табылмады'; @override String searchPrompt({required Object source}) => '${source} арқылы фильмдер мен сериалдарды іздеңіз.'; @override String get searchFailed => 'Іздеу қатесі. Қосылымды тексеріңіз.'; + @override late final _Translations$explore$badge$kk badge = _Translations$explore$badge$kk._(_root); + @override late final _Translations$explore$stats$kk stats = _Translations$explore$stats$kk._(_root); + @override late final _Translations$explore$season$kk season = _Translations$explore$season$kk._(_root); + @override late final _Translations$explore$format$kk format = _Translations$explore$format$kk._(_root); + @override late final _Translations$explore$sourceMaterial$kk sourceMaterial = _Translations$explore$sourceMaterial$kk._(_root); + @override late final _Translations$explore$creditRole$kk creditRole = _Translations$explore$creditRole$kk._(_root); + @override late final _Translations$explore$relation$kk relation = _Translations$explore$relation$kk._(_root); + @override String broadcast({required Object day, required Object time}) => '${day} күні ${time} көрсетіледі'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '${day} күні ${time} ${timezone} көрсетіледі'; + @override late final _Translations$explore$detail$kk detail = _Translations$explore$detail$kk._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, + one: '${n} нәтиже', + other: '${n} нәтиже', + ); } // Path: liveTv @@ -1810,9 +1996,12 @@ class _Translations$addServer$kk extends Translations$addServer$en { final TranslationsKk _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product} серверін қосу'; @override String get serverUrls => 'Сервер URL-дері'; @override String get serverUrlsHelper => 'Үтірмен бөлінген бірнеше URL мекенжайына рұқсат етіледі.'; @override String get findServer => 'Серверді табу'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Жергілікті ${product} серверлері ізделуде...'; + @override String localMediaBrowserServers({required Object product}) => 'Жергілікті ${product} серверлері'; @override String get username => 'Пайдаланушы аты'; @override String get password => 'Құпия сөз'; @override String get signIn => 'Кіру'; @@ -1824,15 +2013,39 @@ class _Translations$addServer$kk extends Translations$addServer$en { @override String get addPlexTitle => 'Plex арқылы кіру'; @override String get pinExpired => 'PIN код мерзімі өтті.'; @override String failedToRegisterAccount({required Object error}) => 'Тіркелгіні тіркеу қатесі: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '${product} серверінің URL мекенжайын енгізіңіз'; @override String get addConnectionTitle => 'Қосылым қосу'; @override String addConnectionTitleScoped({required Object name}) => '${name} профиліне қосу'; @override String get signInWithPlexCard => 'Plex арқылы кіру'; @override String get signInWithPlexCardSubtitle => 'Осы құрылғыны авторизациялау.'; @override String get signInWithPlexCardSubtitleScoped => 'Plex тіркелгісін авторизациялау.'; + @override String connectToMediaBrowserCard({required Object product}) => '${product} қосылу'; + @override String get connectToMediaBrowserCardSubtitle => 'Сервер URL мекенжайын, пайдаланушы атын және құпия сөзді енгізіңіз.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '${product} серверіне кіріңіз. ${name} тіркелгісіне байланыстырылады.'; @override String get borrowFromAnotherProfile => 'Басқа профильден алу'; @override String get borrowFromAnotherProfileSubtitle => 'Басқа профильдің қосылымын қайта пайдалану.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$kk extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get critic => 'Сыншылар'; + @override String get audience => 'Көрермендер'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes сыншылары'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes көрермендері'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$kk extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$kk._(TranslationsKk root) : this._root = root, super.internal(root); @@ -1996,6 +2209,186 @@ class _Translations$explore$status$kk extends Translations$explore$status$en { @override String get upcoming => 'Күтілуде'; } +// Path: explore.badge +class _Translations$explore$badge$kk extends Translations$explore$badge$en { + _Translations$explore$badge$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} танымал'; + @override String rankAiring({required Object n}) => '#${n} эфирде'; + @override String rankRated({required Object n}) => '#${n} бағаланған'; + @override String rankFavorited({required Object n}) => '#${n} таңдаулы'; + @override String rankTrending({required Object n}) => '#${n} трендте'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} — ${season}'; + @override String watchingNow({required Object n}) => '${n} қарауда'; + @override String get available => 'Қолжетімді'; + @override String get partiallyAvailable => 'Жартылай қолжетімді'; + @override String get availableIn4k => '4K қолжетімді'; + @override String get requested => 'Сұралған'; + @override String get pendingApproval => 'Растау күтілуде'; + @override String get processing => 'Өңделуде'; + @override String get declined => 'Қабылданбады'; + @override String get requestFailed => 'Сұрау сәтсіз аяқталды'; + @override String get requested4k => '4K сұралған'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} маусым'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => '${episode}-бөлім ${duration} ішінде'; + @override String nextAiringIn({required Object duration}) => 'Келесісі ${duration} ішінде'; + @override String episodesShort({required Object n}) => '${n} бөл.'; + @override String minutesPerEpisode({required Object n}) => '${n} мин/бөл.'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$kk extends Translations$explore$stats$en { + _Translations$explore$stats$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} тізімде'; + @override String viewersDay({required Object n}) => 'Бүгін ${n} көрді'; + @override String viewersWeek({required Object n}) => 'Осы аптада ${n} көрді'; + @override String viewersMonth({required Object n}) => 'Осы айда ${n} көрді'; + @override String viewersYear({required Object n}) => 'Осы жылы ${n} көрді'; + @override String viewersAllTime({required Object n}) => '${n} көрермен'; + @override String planning({required Object n}) => '${n} көруді жоспарлауда'; + @override String favorited({required Object n}) => '${n} таңдаулы'; + @override String dropRate({required Object percent}) => '${percent} тастап кетті'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, + one: '${n} пікір', + other: '${n} пікір', + ); + @override String votes({required Object n}) => '${n} дауыс'; + @override String watching({required Object n}) => '${n} қарап жатыр'; + @override String completed({required Object n}) => '${n} аяқтады'; + @override String onHold({required Object n}) => '${n} кейінге қалдырды'; + @override String dropped({required Object n}) => '${n} тастады'; +} + +// Path: explore.season +class _Translations$explore$season$kk extends Translations$explore$season$en { + _Translations$explore$season$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get winter => 'Қыс'; + @override String get spring => 'Көктем'; + @override String get summer => 'Жаз'; + @override String get fall => 'Күз'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$kk extends Translations$explore$format$en { + _Translations$explore$format$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get tv => 'ТВ'; + @override String get tvShort => 'Қысқа ТВ'; + @override String get movie => 'Фильм'; + @override String get special => 'Арнайы'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Музыка'; + @override String get other => 'Басқа'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$kk extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get original => 'Түпнұсқа'; + @override String get manga => 'Манга'; + @override String get lightNovel => 'Ранобэ'; + @override String get novel => 'Роман'; + @override String get visualNovel => 'Визуалды роман'; + @override String get game => 'Ойын'; + @override String get webComic => 'Веб-комикс'; + @override String get musicRelease => 'Музыка'; + @override String get otherMedia => 'Басқа'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$kk extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get director => 'Режиссер'; + @override String get writer => 'Сценарист'; + @override String get producer => 'Продюсер'; + @override String get creator => 'Жасаушы'; + @override String get composer => 'Композитор'; +} + +// Path: explore.relation +class _Translations$explore$relation$kk extends Translations$explore$relation$en { + _Translations$explore$relation$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Приквел'; + @override String get sequel => 'Сиквел'; + @override String get sideStory => 'Жанама оқиға'; + @override String get spinOff => 'Спин-офф'; + @override String get alternativeVersion => 'Балама нұсқа'; + @override String get summary => 'Қысқаша мазмұны'; + @override String get parentStory => 'Негізгі оқиға'; + @override String get adaptation => 'Экранизация'; + @override String get other => 'Қатысты'; +} + +// Path: explore.detail +class _Translations$explore$detail$kk extends Translations$explore$detail$en { + _Translations$explore$detail$kk._(TranslationsKk root) : this._root = root, super.internal(root); + + final TranslationsKk _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Түпнұсқа атауы'; + @override String get alsoKnownAs => 'Басқа атаулары'; + @override String get studios => 'Студиялар'; + @override String get country => 'Ел'; + @override String get language => 'Тіл'; + @override String get released => 'Шығарылған'; + @override String get physicalRelease => 'Дискіде'; + @override String get ended => 'Аяқталды'; + @override String addedOn({required Object date}) => '${date} қосылды'; + @override String get yourRating => 'Сіздің бағаңыз'; + @override String get budget => 'Бюджет'; + @override String get revenue => 'Кассалық жиын'; + @override String get contentAdvisory => 'Жас шектеуі'; + @override String get tags => 'Тегтер'; + @override String get revealSpoilerTags => 'Спойлер тегтерін көрсету'; + @override String get links => 'Сілтемелер'; + @override String get watchOn => 'Мына жерде қарау:'; + @override String get watchTrailer => 'Трейлерді қарау'; + @override String openOn({required Object site}) => '${site} сайтында ашу'; + @override String get crew => 'Ұжым'; + @override String get ratings => 'Бағалаулар'; + @override String get schedule => 'Кесте'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, + one: '${n} пайдаланушы ұсынды', + other: '${n} пайдаланушы ұсынды', + ); + @override String recommendedBy({required Object who}) => '${who} ұсынды'; + @override String favoritedBy({required Object who}) => '${who} таңдаулыға қосты'; + @override String unairedEpisodes({required Object n}) => '${n} әлі көрсетілмеген'; + @override String recommendedByPercent({required Object percent}) => 'Көрермендердің ${percent} ұсынады'; + @override String get relatedTitles => 'Қатысты атаулар'; + @override String get background => 'Фон'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$kk extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$kk._(TranslationsKk root) : this._root = root, super.internal(root); @@ -2139,6 +2532,7 @@ class _Translations$services$names$kk extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2208,6 +2602,7 @@ extension on TranslationsKk { 'auth.waitingForAuth' => 'Растау күтілуде...\nБраузеріңізден кіріңіз.', 'auth.useBrowser' => 'Браузерді пайдалану', 'auth.or' => 'немесе', + 'auth.connectToMediaBrowser' => ({required Object product}) => '${product} қосылу', 'auth.useQuickConnect' => 'Жылдам қосылуды пайдалану', 'auth.quickConnectInstructions' => 'Jellyfin-де Жылдам қосылуды ашып, осы кодты енгізіңіз.', 'auth.quickConnectWaiting' => 'Растау күтілуде…', @@ -2259,6 +2654,17 @@ extension on TranslationsKk { 'common.fullscreen' => 'Толық экран', 'common.exitFullscreen' => 'Толық экраннан шығу', 'common.pressBackAgainToExit' => 'Шығу үшін артқа түймесін қайтадан басыңыз', + 'common.ratingSource.critic' => 'Сыншылар', + 'common.ratingSource.audience' => 'Көрермендер', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes сыншылары', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes көрермендері', 'screens.licenses' => 'Лицензиялар', 'screens.switchProfile' => 'Профильді ауыстыру', 'screens.subtitleStyling' => 'Субтитр баптаулары', @@ -2295,6 +2701,7 @@ extension on TranslationsKk { 'settings.darkTheme' => 'Қараңғы', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Кітапхана тығыздығы', + 'settings.displayScale' => 'Дисплей масштабы', 'settings.compact' => 'Тығыз', 'settings.comfortable' => 'Ыңғайлы', 'settings.tvCornerSpotlightBackdrop' => 'Бұрыштық жарық фоны', @@ -2344,6 +2751,11 @@ extension on TranslationsKk { 'settings.bufferSizeMB' => ({required Object size}) => '${size} МБ', 'settings.bufferSizeAuto' => 'Автоматты (Ұсынылатын)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} МБ ЖҰД қолжетімді. ${size} МБ буфер ойнатуға әсер етуі мүмкін.', + 'settings.playbackBuffer' => 'Ойнату буфері', + 'settings.playbackBufferAuto' => 'Авто (ұсынылады)', + 'settings.playbackBufferLarge' => 'Үлкен', + 'settings.playbackBufferExtraLarge' => 'Өте үлкен', + 'settings.playbackBufferDescription' => 'Тұрақсыз қосылыстарға қарсы көбірек буферлейді. Буфер өлшемімен де шектеледі.', 'settings.defaultQualityTitle' => 'Әдепкі сапа', 'settings.musicQualityTitle' => 'Музыка сапасы', 'settings.subtitleStyling' => 'Субтитр баптаулары', @@ -2563,29 +2975,118 @@ extension on TranslationsKk { 'hotkeys.actions.skipMarker' => 'Интро/Титрді өткізу', 'hotkeys.actions.screenshot' => 'Экран суретін түсіру', 'fileInfo.title' => 'Файл туралы ақпарат', + 'fileInfo.overview' => 'Шолу', 'fileInfo.video' => 'Видео', 'fileInfo.audio' => 'Аудио', 'fileInfo.subtitles' => 'Субтитрлер', + 'fileInfo.images' => 'Кірістірілген суреттер', + 'fileInfo.dataStreams' => 'Деректер ағындары', + 'fileInfo.lyrics' => 'Ән мәтіні', 'fileInfo.file' => 'Файл', + 'fileInfo.attachments' => 'Тіркемелер', + 'fileInfo.delivery' => 'Жеткізу', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Нұсқа ${index} / ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Файл ${index} / ${count}', + 'fileInfo.noStreams' => 'Сервер бұл файл үшін ағындар жоқ деп хабарлады.', + 'fileInfo.copyPath' => 'Жолды көшіру', + 'fileInfo.pathCopied' => 'Файл жолы көшірілді', 'fileInfo.codec' => 'Кодек', + 'fileInfo.codecTag' => 'Кодек тегі', 'fileInfo.resolution' => 'Ажыратымдылық', + 'fileInfo.codedResolution' => 'Кодталған ажыратымдылық', 'fileInfo.bitrate' => 'Биттік жылдамдық (Bitrate)', 'fileInfo.frameRate' => 'Кадр жиілігі', + 'fileInfo.rotation' => 'Бұрылыс', + 'fileInfo.comment' => 'Пікір', + 'fileInfo.audioDescription' => 'Аудио сипаттама', + 'fileInfo.headerCompression' => 'Тақырып қысуы', + 'fileInfo.sidecarFile' => 'Қосалқы файл', + 'fileInfo.transportTimestamp' => 'Транспорт уақыт белгісі', + 'fileInfo.displayOffset' => 'Көрсету ығысуы', + 'fileInfo.previewFailureCode' => 'Алдын ала қарау қате коды', + 'fileInfo.previewRetries' => 'Алдын ала қарау қайталаулары', 'fileInfo.aspectRatio' => 'Тараптар қатынасы', + 'fileInfo.pixelAspectRatio' => 'Пиксель пропорциясы', 'fileInfo.profile' => 'Профиль', + 'fileInfo.level' => 'Деңгей', 'fileInfo.bitDepth' => 'Бит тереңдігі', + 'fileInfo.pixelFormat' => 'Пиксель форматы', 'fileInfo.colorSpace' => 'Түс кеңістігі', 'fileInfo.colorRange' => 'Түс диапазоны', 'fileInfo.colorPrimaries' => 'Негізгі түстер', + 'fileInfo.colorTransfer' => 'Түс тасымалдауы', 'fileInfo.chromaSubsampling' => 'Түстік субдискретизация', + 'fileInfo.chromaLocation' => 'Chroma орналасуы', + 'fileInfo.scanType' => 'Сканерлеу түрі', + 'fileInfo.interlaced' => 'Жоларалық', + 'fileInfo.anamorphic' => 'Анаморфты', + 'fileInfo.referenceFrames' => 'Тірек кадрлар', + 'fileInfo.dynamicRange' => 'Динамикалық диапазон', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision деңгейі', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision нұсқасы', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision қабаттары', + 'fileInfo.baseLayerCompatibility' => 'Базалық қабат үйлесімділігі', + 'fileInfo.avcBitstream' => 'AVC бит ағыны', + 'fileInfo.nalLengthSize' => 'NAL ұзындық өлшемі', + 'fileInfo.scalingMatrix' => 'Теңшелетін масштабтау матрицасы', + 'fileInfo.streamIdentifier' => 'Ағын идентификаторы', + 'fileInfo.streamIndex' => 'Ағын индексі', + 'fileInfo.streamId' => 'Ағын ID', + 'fileInfo.language' => 'Тіл', + 'fileInfo.languageCode' => 'Тіл коды', + 'fileInfo.streamTitle' => 'Трек атауы', 'fileInfo.channels' => 'Арналар', + 'fileInfo.sampleRate' => 'Дискретизация жиілігі', + 'fileInfo.spatialAudio' => 'Кеңістіктік аудио', + 'fileInfo.textBased' => 'Мәтіндік', + 'fileInfo.subtitleFormat' => 'Қосалқы формат', + 'fileInfo.provider' => 'Провайдер', + 'fileInfo.matchScore' => 'Сәйкестік ұпайы', + 'fileInfo.externalDelivery' => 'Бөлек жеткізілуі мүмкін', + 'fileInfo.sidecarPath' => 'Қосалқы файл жолы', + 'fileInfo.sourceStream' => 'Көшірілген көзі', + 'fileInfo.temporary' => 'Уақытша', + 'fileInfo.timeBase' => 'Уақыт негізі', 'fileInfo.overallBitrate' => 'Жалпы биттік жылдамдық', 'fileInfo.path' => 'Жол', + 'fileInfo.fileName' => 'Файл атауы', 'fileInfo.size' => 'Көлемі', + 'fileInfo.totalSize' => 'Жалпы өлшемі', 'fileInfo.container' => 'Контейнер', 'fileInfo.duration' => 'Уақыты', + 'fileInfo.previewThumbnails' => 'Алдын ала қарау суреттері', + 'fileInfo.previewIndex' => 'Алдын ала қарау индексі', + 'fileInfo.packetLength' => 'Пакет ұзындығы', + 'fileInfo.filePresent' => 'Файл бар', + 'fileInfo.fileReadable' => 'Сервер оқи алады', + 'fileInfo.streamPath' => 'Ағын жолы', 'fileInfo.optimizedForStreaming' => 'Ағынды беру үшін оңтайландырылған', 'fileInfo.has64bitOffsets' => '64-биттік ығысулар', + 'fileInfo.protocol' => 'Протокол', + 'fileInfo.mediaType' => 'Медиа түрі', + 'fileInfo.sourceKind' => 'Дереккөз түрі', + 'fileInfo.optimizedVersion' => 'Оңтайландырылған нұсқа', + 'fileInfo.optimizationTarget' => 'Оңтайландыру мақсаты', + 'fileInfo.deletedAt' => 'Өшірілген', + 'fileInfo.remoteSource' => 'Қашықтағы дереккөз', + 'fileInfo.infiniteStream' => 'Шексіз ағын', + 'fileInfo.directPlay' => 'Тікелей ойнату', + 'fileInfo.directStream' => 'Тікелей ағын', + 'fileInfo.transcoding' => 'Транскодтау', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Нұсқа ID', + 'fileInfo.fileId' => 'Файл ID', + 'fileInfo.defaultAudioTrack' => 'Әдепкі аудио трек', + 'fileInfo.defaultSubtitleTrack' => 'Әдепкі субтитр трегі', + 'fileInfo.subtitlesOff' => 'Өшірулі', + 'fileInfo.flagDefault' => 'Әдепкі', + 'fileInfo.flagForced' => 'Мәжбүрлі', + 'fileInfo.flagSelected' => 'Таңдалған', + 'fileInfo.flagExternal' => 'Сыртқы', + 'fileInfo.flagHearingImpaired' => 'Есту қабілеті бұзылғандар үшін', + 'fileInfo.flagDub' => 'Дубляж', + 'fileInfo.flagOriginal' => 'Түпнұсқа', 'mediaMenu.markAsWatched' => 'Көрілді деп белгілеу', 'mediaMenu.markAsUnwatched' => 'Көрілмеді деп белгілеу', 'mediaMenu.removeFromContinueWatching' => '"Көруді жалғастыру" тізімінен өшіру', @@ -2594,7 +3095,28 @@ extension on TranslationsKk { 'mediaMenu.shufflePlay' => 'Араластырып ойнату', 'mediaMenu.shuffleNotAvailableOffline' => 'Араластырып ойнату офлайн режимде қолжетімсіз', 'mediaMenu.fileInfo' => 'Файл туралы ақпарат', + 'mediaMenu.deleteEpisodeFromServer' => 'Бөлімді серверден өшіру', + 'mediaMenu.deleteSeasonFromServer' => 'Маусымды серверден өшіру', + 'mediaMenu.deleteShowFromServer' => 'Сериалды серверден өшіру', + 'mediaMenu.deleteMovieFromServer' => 'Фильмді серверден өшіру', + 'mediaMenu.deleteEpisodeTitle' => 'Осы бөлім өшірілсін бе?', + 'mediaMenu.deleteSeasonTitle' => 'Осы маусым өшірілсін бе?', + 'mediaMenu.deleteShowTitle' => 'Осы сериал өшірілсін бе?', + 'mediaMenu.deleteMovieTitle' => 'Осы фильм өшірілсін бе?', + 'mediaMenu.deleteEpisodeConfirm' => 'Бөлімді өшіру', + 'mediaMenu.deleteSeasonConfirm' => 'Маусымды өшіру', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Сериалды өшіру', + 'mediaMenu.deleteMovieConfirm' => 'Фильмді өшіру', + 'mediaMenu.deleteAnyway' => 'Бәрібір өшіру', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '${title} серверіңізден толық өшірілсін бе?', 'mediaMenu.deleteMultipleWarning' => 'Бұл барлық бөлімдер мен файлдарға әсер етеді.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, one: 'Бұл ондағы ${n} бөлімді және оның файлын өшіреді.', other: 'Бұл ондағы барлық ${n} бөлімді және олардың файлдарын өшіреді.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, one: 'Бұл элемент ${n} файл ретінде сақталған, ол өшіріледі.', other: 'Бұл элемент ${n} файлда сақталған, олардың барлығы өшіріледі.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, one: 'Сол файлда тағы ${n} бөлім сақталған, ол да өшіріледі:', other: 'Сол файлда тағы ${n} бөлім сақталған, олар да өшіріледі:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy қандай файлдар өшірілетінін тексере алмады, сондықтан ол жоғарыда аталған элементтен артық өшіруі мүмкін. Бас тартып, қайталап көріңіз немесе бәрібір өшіріңіз.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Серверіңіз бұл элемент үшін файл мәліметтерін ұсынбады, сондықтан Plezy қандай файлдар өшірілетінін тексере алмайды. Ол жоғарыда аталған элементтен артық өшіруі мүмкін.', 'mediaMenu.mediaDeletedSuccessfully' => 'Медиа элементі сәтті өшірілді', 'mediaMenu.mediaFailedToDelete' => 'Медиа элементін өшіру мүмкін болмады', 'mediaMenu.rate' => 'Бағалау', @@ -2660,6 +3182,9 @@ extension on TranslationsKk { 'videoControls.playNext' => 'Келесіні ойнату', 'videoControls.playButton' => 'Ойнату', 'videoControls.pauseButton' => 'Кідірту', + 'videoControls.playbackPaused' => 'Кідіртілді', + 'videoControls.playbackResumed' => 'Ойнатылуда', + 'videoControls.loadingVideo' => 'Бейне жүктелуде', 'videoControls.showPlaybackControls' => 'Басқару элементтерін көрсету', 'videoControls.hidePlaybackControls' => 'Басқару элементтерін жасыру', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} секунд артқа айналдыру', @@ -2711,8 +3236,6 @@ extension on TranslationsKk { 'videoControls.searchSubtitles' => 'Субтитр іздеу', 'videoControls.language' => 'Тіл', 'videoControls.noSubtitlesFound' => 'Субтитр табылмады', - _ => null, - } ?? switch (path) { 'videoControls.subtitleDownloaded' => 'Субтитр жүктелді', 'videoControls.subtitleDownloadedNotApplied' => 'Субтитр жүктелді, бірақ қолданылмады', 'videoControls.subtitleDownloadFailed' => 'Субтитрді жүктеу мүмкін болмады', @@ -2764,6 +3287,8 @@ extension on TranslationsKk { 'messages.switchingToCompatiblePlayer' => 'Үйлесімді ойнатқышқа ауысуда...', 'messages.serverLimitTitle' => 'Ойнату қатесі', 'messages.serverLimitBody' => 'Сервер қатесі (HTTP 500). Шектеу бұл сеансты қабылдамады.', + 'messages.mediaUnreadableTitle' => 'Файл қолжетімсіз', + 'messages.mediaUnreadableBody' => 'Сервер бұл элементті тапты, бірақ оның файлын оқи алмады (HTTP 404). Файл жылжытылған, өшірілген немесе оның сақтау орны қолжетімсіз болуы мүмкін. Сервер иесінен файлды тексеріп, кітапхананы қайта сканерлеуді сұраңыз.', 'messages.logsUploaded' => 'Журналдар жүктелді', 'messages.logsUploadFailed' => 'Журналдарды жүктеу мүмкін болмады', 'messages.logId' => 'Журнал ID-сі', @@ -2872,6 +3397,8 @@ extension on TranslationsKk { 'connections.sessionExpiredOne' => ({required Object name}) => '${name} үшін сеанс мерзімі өтті', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} сервер үшін сеанс мерзімі өтті', 'connections.signInAgain' => 'Қайтадан кіру', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '${product} қосылымын өңдеу', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '${serverName} үшін URL мекенжайларды қосыңыз немесе өшіріңіз. Plezy ең төмен кідірісі бар қолжетімді URL мекенжайды пайдаланады.', 'discover.title' => 'Шолу', 'discover.noContentAvailable' => 'Мазмұн қолжетімсіз', 'discover.addMediaToLibraries' => 'Кітапханаларыңызға медиа қосыңыз', @@ -3005,6 +3532,36 @@ extension on TranslationsKk { 'logs.clearLogs' => 'Журналдарды тазалау', 'logs.copyLogs' => 'Журналдарды көшіру', 'logs.uploadLogs' => 'Журналдарды жүктеу', + 'startup.failedTitle' => 'Plezy іске қосылмады', + 'startup.failedBody' => 'Іске қосу кезінде қате орын алды. Төмендегі мәліметтер ненің сәтсіз аяқталғанын көрсетеді.', + 'startup.failedBodyRepairable' => 'Plezy сақталған баптаулар файлы зақымдалған және Plezy іске қосылмас бұрын оны қайта құру қажет. Қайталау көмектеспейді — «Сақтауды қалпына келтіру» тармағын таңдаңыз.', + 'startup.phaseLabel' => 'Қадам', + 'startup.showDetails' => 'Мәліметтерді көрсету', + 'startup.hideDetails' => 'Мәліметтерді жасыру', + 'startup.copyDetails' => 'Мәліметтерді көшіру', + 'startup.detailsCopied' => 'Мәліметтер алмасу буферіне көшірілді', + 'startup.uploadDetails' => 'Мәліметтерді жүктеп жіберу', + 'startup.repairStorage' => 'Сақтауды қалпына келтіру', + 'startup.repairTitle' => 'Сақталған деректер қалпына келтірілсін бе?', + 'startup.repairBodyCommon' => 'Plezy баптаулар файлы зақымдалған және оқылмайды. Қалпына келтіру барлық баптауды әдепкі мәнге қайтарады.', + 'startup.repairBodyOneCredential' => 'Бір сақталған кіру деректері зақымдалған және оқылмайды. Қалпына келтіру тек соны өшіреді; қалған баптауларыңызға тиіспейді.', + 'startup.repairBodySignInsKept' => 'Серверлеріңіз бен профильдеріңіз кірген күйінде қалады.', + 'startup.repairBodySignInsLost' => 'Сақталған кіру деректерін қорғайтын кілт осы файлдан қалпына келтірілмейді, сондықтан әрбір сервер мен профильге қайта кіруге тура келеді. Медиа серверіңіздегі ештеңеге әсер етілмейді.', + 'startup.repairBodySessionsUncertain' => 'Tracker-лар (MAL, AniList, Simkl, Trakt) және Seerr бөлек сақталады және сақталуы да, сақталмауы да мүмкін. Plezy не сақталғанын нақты айтады.', + 'startup.repairConfirm' => 'Қалпына келтіру', + 'startup.repairSucceeded' => 'Сақтау қалпына келтірілді', + 'startup.repairNeedsRestart' => 'Сақтау қалпына келтірілді — қайта іске қосу қажет', + 'startup.restartRequiredBody' => 'Деректеріңіз қалпына келтірілді, бірақ Plezy оларды пайдаланар алдында жаңадан іске қосылуы керек. Plezy жабыңыз да, қайта ашыңыз.', + 'startup.quitPlezy' => 'Plezy бағдарламасынан шығу', + 'startup.repairFailed' => 'Қалпына келтіру сәтсіз аяқталды', + 'startup.repairKeptSignIns' => 'Серверлеріңіз бен профильдеріңіз әлі кірген күйде.', + 'startup.repairLostSignIns' => 'Сақталған кіру деректерін қорғайтын кілт қалпына келтірілмеді. Әрбір сервер мен профильге қайта кіруге тура келеді.', + 'startup.repairLostSessions' => 'Кем дегенде бір tracker немесе Seerr қосылымы жоғалды, оны қайта қосу қажет.', + 'startup.backupTitle' => 'Зақымдалған файлдың көшірмесі сақталды', + 'startup.backupWarning' => 'Онда сіздің кіру деректеріңіз бар. Оны жүктеп жібермеңіз немесе бөліспеңіз.', + 'startup.deleteBackup' => 'Көшірмені өшіру', + 'startup.backupDeleted' => 'Көшірме өшірілді.', + 'startup.previousFailureTitle' => 'Plezy соңғы рет іске қосыла алмады', 'licenses.relatedPackages' => 'Байланысты пакеттер', 'licenses.license' => 'Лицензия', 'licenses.licenseNumber' => ({required Object number}) => 'Лицензия ${number}', @@ -3048,6 +3605,113 @@ extension on TranslationsKk { 'explore.searchEmpty' => ({required Object query}) => '"${query}" бойынша нәтиже табылмады', 'explore.searchPrompt' => ({required Object source}) => '${source} арқылы фильмдер мен сериалдарды іздеңіз.', 'explore.searchFailed' => 'Іздеу қатесі. Қосылымды тексеріңіз.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} танымал', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} эфирде', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} бағаланған', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} таңдаулы', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} трендте', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} — ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} қарауда', + 'explore.badge.available' => 'Қолжетімді', + 'explore.badge.partiallyAvailable' => 'Жартылай қолжетімді', + 'explore.badge.availableIn4k' => '4K қолжетімді', + 'explore.badge.requested' => 'Сұралған', + 'explore.badge.pendingApproval' => 'Растау күтілуде', + 'explore.badge.processing' => 'Өңделуде', + 'explore.badge.declined' => 'Қабылданбады', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Сұрау сәтсіз аяқталды', + 'explore.badge.requested4k' => '4K сұралған', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} маусым', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => '${episode}-бөлім ${duration} ішінде', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Келесісі ${duration} ішінде', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} бөл.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} мин/бөл.', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} тізімде', + 'explore.stats.viewersDay' => ({required Object n}) => 'Бүгін ${n} көрді', + 'explore.stats.viewersWeek' => ({required Object n}) => 'Осы аптада ${n} көрді', + 'explore.stats.viewersMonth' => ({required Object n}) => 'Осы айда ${n} көрді', + 'explore.stats.viewersYear' => ({required Object n}) => 'Осы жылы ${n} көрді', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} көрермен', + 'explore.stats.planning' => ({required Object n}) => '${n} көруді жоспарлауда', + 'explore.stats.favorited' => ({required Object n}) => '${n} таңдаулы', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} тастап кетті', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, one: '${n} пікір', other: '${n} пікір', ), + 'explore.stats.votes' => ({required Object n}) => '${n} дауыс', + 'explore.stats.watching' => ({required Object n}) => '${n} қарап жатыр', + 'explore.stats.completed' => ({required Object n}) => '${n} аяқтады', + 'explore.stats.onHold' => ({required Object n}) => '${n} кейінге қалдырды', + 'explore.stats.dropped' => ({required Object n}) => '${n} тастады', + 'explore.season.winter' => 'Қыс', + 'explore.season.spring' => 'Көктем', + 'explore.season.summer' => 'Жаз', + 'explore.season.fall' => 'Күз', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'ТВ', + 'explore.format.tvShort' => 'Қысқа ТВ', + 'explore.format.movie' => 'Фильм', + 'explore.format.special' => 'Арнайы', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Музыка', + 'explore.format.other' => 'Басқа', + 'explore.sourceMaterial.original' => 'Түпнұсқа', + 'explore.sourceMaterial.manga' => 'Манга', + 'explore.sourceMaterial.lightNovel' => 'Ранобэ', + 'explore.sourceMaterial.novel' => 'Роман', + 'explore.sourceMaterial.visualNovel' => 'Визуалды роман', + 'explore.sourceMaterial.game' => 'Ойын', + 'explore.sourceMaterial.webComic' => 'Веб-комикс', + 'explore.sourceMaterial.musicRelease' => 'Музыка', + 'explore.sourceMaterial.otherMedia' => 'Басқа', + 'explore.creditRole.director' => 'Режиссер', + 'explore.creditRole.writer' => 'Сценарист', + 'explore.creditRole.producer' => 'Продюсер', + 'explore.creditRole.creator' => 'Жасаушы', + 'explore.creditRole.composer' => 'Композитор', + 'explore.relation.prequel' => 'Приквел', + 'explore.relation.sequel' => 'Сиквел', + 'explore.relation.sideStory' => 'Жанама оқиға', + 'explore.relation.spinOff' => 'Спин-офф', + 'explore.relation.alternativeVersion' => 'Балама нұсқа', + 'explore.relation.summary' => 'Қысқаша мазмұны', + 'explore.relation.parentStory' => 'Негізгі оқиға', + 'explore.relation.adaptation' => 'Экранизация', + 'explore.relation.other' => 'Қатысты', + 'explore.broadcast' => ({required Object day, required Object time}) => '${day} күні ${time} көрсетіледі', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '${day} күні ${time} ${timezone} көрсетіледі', + 'explore.detail.originalTitle' => 'Түпнұсқа атауы', + 'explore.detail.alsoKnownAs' => 'Басқа атаулары', + 'explore.detail.studios' => 'Студиялар', + 'explore.detail.country' => 'Ел', + 'explore.detail.language' => 'Тіл', + 'explore.detail.released' => 'Шығарылған', + 'explore.detail.physicalRelease' => 'Дискіде', + 'explore.detail.ended' => 'Аяқталды', + 'explore.detail.addedOn' => ({required Object date}) => '${date} қосылды', + 'explore.detail.yourRating' => 'Сіздің бағаңыз', + 'explore.detail.budget' => 'Бюджет', + 'explore.detail.revenue' => 'Кассалық жиын', + 'explore.detail.contentAdvisory' => 'Жас шектеуі', + 'explore.detail.tags' => 'Тегтер', + 'explore.detail.revealSpoilerTags' => 'Спойлер тегтерін көрсету', + 'explore.detail.links' => 'Сілтемелер', + 'explore.detail.watchOn' => 'Мына жерде қарау:', + 'explore.detail.watchTrailer' => 'Трейлерді қарау', + 'explore.detail.openOn' => ({required Object site}) => '${site} сайтында ашу', + 'explore.detail.crew' => 'Ұжым', + 'explore.detail.ratings' => 'Бағалаулар', + 'explore.detail.schedule' => 'Кесте', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, one: '${n} пайдаланушы ұсынды', other: '${n} пайдаланушы ұсынды', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '${who} ұсынды', + 'explore.detail.favoritedBy' => ({required Object who}) => '${who} таңдаулыға қосты', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} әлі көрсетілмеген', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Көрермендердің ${percent} ұсынады', + 'explore.detail.relatedTitles' => 'Қатысты атаулар', + 'explore.detail.background' => 'Фон', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('kk'))(n, one: '${n} нәтиже', other: '${n} нәтиже', ), 'liveTv.title' => 'Тікелей TV', 'liveTv.guide' => 'Телебағдарлама', 'liveTv.noChannels' => 'Қолжетімді арналар жоқ', @@ -3225,8 +3889,6 @@ extension on TranslationsKk { 'watchTogether.codeMustBe5Chars' => 'Сеанс коды 5 таңбадан тұруы керек', 'watchTogether.joinInstructions' => 'Ұйымдастырушының сеанс кодын енгізіңіз.', 'watchTogether.failedToCreate' => 'Сеансты жасау мүмкін болмады', - _ => null, - } ?? switch (path) { 'watchTogether.failedToJoin' => 'Сеансқа қосылу мүмкін болмады', 'watchTogether.sessionCodeCopied' => 'Сеанс коды көшірілді', 'watchTogether.relayUnreachable' => 'Реле сервері қолжетімсіз.', @@ -3471,6 +4133,8 @@ extension on TranslationsKk { 'performanceOverlay.dvRpus' => 'DV RPU-лар', 'performanceOverlay.dvRpuAverage' => 'DV RPU Орт.', 'performanceOverlay.dvSampleAverage' => 'DV Үлгі Орт.', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Макс Luma', 'performanceOverlay.minLuma' => 'Мин Luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3640,6 +4304,7 @@ extension on TranslationsKk { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Plezy-ді ${service} қызметінде белсендіру', 'services.deviceCode.body' => ({required Object url}) => '${url} мекенжайына өтіп, осы кодты енгізіңіз:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Белсендіру үшін ${service} ашу', @@ -3663,9 +4328,12 @@ extension on TranslationsKk { 'services.libraryFilter.modeHintWhitelist' => 'Тек төменде таңдалған кітапханаларды синхрондау.', 'services.libraryFilter.libraries' => 'Кітапханалар', 'services.libraryFilter.noLibraries' => 'Кітапханалар жоқ', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product} серверін қосу', 'addServer.serverUrls' => 'Сервер URL-дері', 'addServer.serverUrlsHelper' => 'Үтірмен бөлінген бірнеше URL мекенжайына рұқсат етіледі.', 'addServer.findServer' => 'Серверді табу', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Жергілікті ${product} серверлері ізделуде...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Жергілікті ${product} серверлері', 'addServer.username' => 'Пайдаланушы аты', 'addServer.password' => 'Құпия сөз', 'addServer.signIn' => 'Кіру', @@ -3677,11 +4345,15 @@ extension on TranslationsKk { 'addServer.addPlexTitle' => 'Plex арқылы кіру', 'addServer.pinExpired' => 'PIN код мерзімі өтті.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Тіркелгіні тіркеу қатесі: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '${product} серверінің URL мекенжайын енгізіңіз', 'addServer.addConnectionTitle' => 'Қосылым қосу', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} профиліне қосу', 'addServer.signInWithPlexCard' => 'Plex арқылы кіру', 'addServer.signInWithPlexCardSubtitle' => 'Осы құрылғыны авторизациялау.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Plex тіркелгісін авторизациялау.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '${product} қосылу', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Сервер URL мекенжайын, пайдаланушы атын және құпия сөзді енгізіңіз.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '${product} серверіне кіріңіз. ${name} тіркелгісіне байланыстырылады.', 'addServer.borrowFromAnotherProfile' => 'Басқа профильден алу', 'addServer.borrowFromAnotherProfileSubtitle' => 'Басқа профильдің қосылымын қайта пайдалану.', _ => null, diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 5789a6be..5cb76af2 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -67,6 +67,7 @@ class TranslationsKo extends Translations with BaseTranslations '인증 대기 중...\n브라우저에서 로그인하세요.'; @override String get useBrowser => '브라우저 사용'; @override String get or => '또는'; + @override String connectToMediaBrowser({required Object product}) => '${product}에 연결'; @override String get useQuickConnect => 'Quick Connect 사용'; @override String get quickConnectInstructions => 'Jellyfin에서 Quick Connect를 열고 이 코드를 입력하세요.'; @override String get quickConnectWaiting => '승인 대기 중…'; @@ -175,6 +177,7 @@ class _Translations$common$ko extends Translations$common$en { @override String get fullscreen => '전체 화면'; @override String get exitFullscreen => '전체 화면 종료'; @override String get pressBackAgainToExit => '한 번 더 누르면 종료됩니다'; + @override late final _Translations$common$ratingSource$ko ratingSource = _Translations$common$ratingSource$ko._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$ko extends Translations$settings$en { @override String get darkTheme => '다크'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => '라이브러리 표시 밀도'; + @override String get displayScale => '표시 배율'; @override String get compact => '조밀하게'; @override String get comfortable => '여유롭게'; @override String get tvCornerSpotlightBackdrop => '모서리 스포트라이트 배경'; @@ -287,6 +291,11 @@ class _Translations$settings$ko extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => '자동 (권장)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB 메모리를 사용할 수 있습니다. ${size}MB 버퍼는 재생에 영향을 줄 수 있습니다.'; + @override String get playbackBuffer => '재생 버퍼'; + @override String get playbackBufferAuto => '자동 (권장)'; + @override String get playbackBufferLarge => '대형'; + @override String get playbackBufferExtraLarge => '초대형'; + @override String get playbackBufferDescription => '불안정한 연결에 대비해 더 많은 버퍼를 사용합니다. 버퍼 크기에 의해서도 제한됩니다.'; @override String get defaultQualityTitle => '기본 화질'; @override String get musicQualityTitle => '음악 음질'; @override String get subtitleStyling => '자막 스타일'; @@ -320,6 +329,9 @@ class _Translations$settings$ko extends Translations$settings$en { @override String get debugLoggingDescription => '문제 해결을 위해 상세 로깅 활성화'; @override String get viewLogs => '로그 보기'; @override String get viewLogsDescription => '애플리케이션 로그 확인'; + @override String get clearImageCache => '이미지 캐시 지우기'; + @override String get clearImageCacheDescription => '캐시된 아트워크와 썸네일을 지웁니다. 다시 다운로드할 때까지 이미지가 느리게 로드될 수 있습니다.'; + @override String get clearImageCacheSuccess => '이미지 캐시를 성공적으로 지웠습니다'; @override String get resetSettings => '설정 재설정'; @override String get resetSettingsDescription => '기본 설정으로 복원합니다. 되돌릴 수 없습니다.'; @override String get resetSettingsSuccess => '설정 재설정 성공'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$ko extends Translations$fileInfo$en { // Translations @override String get title => '파일 정보'; + @override String get overview => '개요'; @override String get video => '비디오'; @override String get audio => '오디오'; @override String get subtitles => '자막'; + @override String get images => '내장 이미지'; + @override String get dataStreams => '데이터 스트림'; + @override String get lyrics => '가사'; @override String get file => '파일'; + @override String get attachments => '첨부 파일'; + @override String get delivery => '재생 방식'; + @override String versionCounter({required Object index, required Object count}) => '버전 ${index} / ${count}'; + @override String fileCounter({required Object index, required Object count}) => '파일 ${index} / ${count}'; + @override String get noStreams => '서버에서 이 파일에 대한 스트림 정보를 보고하지 않았습니다.'; + @override String get copyPath => '경로 복사'; + @override String get pathCopied => '파일 경로가 복사되었습니다'; @override String get codec => '코덱'; + @override String get codecTag => '코덱 태그'; @override String get resolution => '해상도'; + @override String get codedResolution => '코딩 해상도'; @override String get bitrate => '비트레이트'; @override String get frameRate => '프레임 속도'; + @override String get rotation => '회전'; + @override String get comment => '주석'; + @override String get audioDescription => '오디오 설명'; + @override String get headerCompression => '헤더 압축'; + @override String get sidecarFile => '사이드카 파일'; + @override String get transportTimestamp => '전송 타임스탬프'; + @override String get displayOffset => '표시 오프셋'; + @override String get previewFailureCode => '미리보기 오류 코드'; + @override String get previewRetries => '미리보기 재시도 횟수'; @override String get aspectRatio => '종횡비'; + @override String get pixelAspectRatio => '픽셀 종횡비'; @override String get profile => '프로파일'; + @override String get level => '레벨'; @override String get bitDepth => '비트 심도'; + @override String get pixelFormat => '픽셀 포맷'; @override String get colorSpace => '색 공간'; @override String get colorRange => '색 범위'; @override String get colorPrimaries => '색 원색'; + @override String get colorTransfer => '색상 전송'; @override String get chromaSubsampling => '색차 서브샘플링'; + @override String get chromaLocation => '크로마 위치'; + @override String get scanType => '주사 방식'; + @override String get interlaced => '비월 주사'; + @override String get anamorphic => '아나모픽'; + @override String get referenceFrames => '참조 프레임'; + @override String get dynamicRange => '동적 범위'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision 레벨'; + @override String get dolbyVisionVersion => 'Dolby Vision 버전'; + @override String get dolbyVisionLayers => 'Dolby Vision 레이어'; + @override String get baseLayerCompatibility => '베이스 레이어 호환성'; + @override String get avcBitstream => 'AVC 비트스트림'; + @override String get nalLengthSize => 'NAL 길이 크기'; + @override String get scalingMatrix => '사용자 지정 스케일링 매트릭스'; + @override String get streamIdentifier => '스트림 식별자'; + @override String get streamIndex => '스트림 인덱스'; + @override String get streamId => '스트림 ID'; + @override String get language => '언어'; + @override String get languageCode => '언어 코드'; + @override String get streamTitle => '트랙 제목'; @override String get channels => '채널'; + @override String get sampleRate => '샘플 레이트'; + @override String get spatialAudio => '공간 오디오'; + @override String get textBased => '텍스트 기반'; + @override String get subtitleFormat => '사이드카 포맷'; + @override String get provider => '제공자'; + @override String get matchScore => '일치 점수'; + @override String get externalDelivery => '별도 제공 가능'; + @override String get sidecarPath => '사이드카 경로'; + @override String get sourceStream => '복사 출처'; + @override String get temporary => '임시'; + @override String get timeBase => '시간 기준'; @override String get overallBitrate => '전체 비트레이트'; @override String get path => '경로'; + @override String get fileName => '파일 이름'; @override String get size => '크기'; + @override String get totalSize => '총 크기'; @override String get container => '컨테이너'; @override String get duration => '재생 시간'; + @override String get previewThumbnails => '미리보기 썸네일'; + @override String get previewIndex => '미리보기 인덱스'; + @override String get packetLength => '패킷 길이'; + @override String get filePresent => '파일 있음'; + @override String get fileReadable => '서버에서 읽기 가능'; + @override String get streamPath => '스트림 경로'; @override String get optimizedForStreaming => '스트리밍 최적화'; @override String get has64bitOffsets => '64비트 오프셋'; + @override String get protocol => '프로토콜'; + @override String get mediaType => '미디어 유형'; + @override String get sourceKind => '소스 종류'; + @override String get optimizedVersion => '최적화 버전'; + @override String get optimizationTarget => '최적화 대상'; + @override String get deletedAt => '삭제됨'; + @override String get remoteSource => '원격 소스'; + @override String get infiniteStream => '무한 스트림'; + @override String get directPlay => 'Direct Play'; + @override String get directStream => 'Direct Stream'; + @override String get transcoding => '트랜스코딩'; + @override String get etag => 'ETag'; + @override String get versionId => '버전 ID'; + @override String get fileId => '파일 ID'; + @override String get defaultAudioTrack => '기본 오디오 트랙'; + @override String get defaultSubtitleTrack => '기본 자막 트랙'; + @override String get subtitlesOff => '꺼짐'; + @override String get flagDefault => '기본'; + @override String get flagForced => '강제'; + @override String get flagSelected => '선택됨'; + @override String get flagExternal => '외부'; + @override String get flagHearingImpaired => '청각 장애인용'; + @override String get flagDub => '더빙'; + @override String get flagOriginal => '원본'; } // Path: mediaMenu @@ -546,7 +647,32 @@ class _Translations$mediaMenu$ko extends Translations$mediaMenu$en { @override String get shufflePlay => '무작위 재생'; @override String get shuffleNotAvailableOffline => '오프라인에서는 무작위 재생을 사용할 수 없습니다'; @override String get fileInfo => '파일 정보'; + @override String get deleteEpisodeFromServer => '서버에서 에피소드 삭제'; + @override String get deleteSeasonFromServer => '서버에서 시즌 삭제'; + @override String get deleteShowFromServer => '서버에서 프로그램 삭제'; + @override String get deleteMovieFromServer => '서버에서 영화 삭제'; + @override String get deleteEpisodeTitle => '이 에피소드를 삭제할까요?'; + @override String get deleteSeasonTitle => '이 시즌을 삭제할까요?'; + @override String get deleteShowTitle => '이 프로그램을 삭제할까요?'; + @override String get deleteMovieTitle => '이 영화를 삭제할까요?'; + @override String get deleteEpisodeConfirm => '에피소드 삭제'; + @override String get deleteSeasonConfirm => '시즌 삭제'; + @override String get deleteShowConfirm => '프로그램 삭제'; + @override String get deleteMovieConfirm => '영화 삭제'; + @override String get deleteAnyway => '그래도 삭제'; + @override String confirmDeleteTarget({required Object title}) => '서버에서 ${title}을(를) 영구 삭제할까요?'; @override String get deleteMultipleWarning => '모든 에피소드와 파일이 포함됩니다.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + other: '포함된 에피소드 ${n}개와 해당 파일이 모두 삭제됩니다.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + other: '이 항목은 파일 ${n}개에 걸쳐 저장되어 있으며, 모든 파일이 삭제됩니다.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + other: '같은 파일에 저장된 다른 에피소드 ${n}개도 함께 삭제됩니다:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy가 어떤 파일이 삭제될지 확인하지 못해 위 항목보다 더 많은 파일이 삭제될 수 있습니다. 취소하고 다시 시도하거나 그래도 삭제하세요.'; + @override String get deleteScopeUnverifiedNoFileInfo => '서버가 이 항목의 파일 정보를 제공하지 않아 Plezy가 어떤 파일이 삭제될지 확인할 수 없습니다. 위 항목보다 더 많은 파일이 삭제될 수 있습니다.'; @override String get mediaDeletedSuccessfully => '미디어 항목이 성공적으로 삭제되었습니다'; @override String get mediaFailedToDelete => '미디어 항목 삭제 실패'; @override String get rate => '평가'; @@ -657,6 +783,9 @@ class _Translations$videoControls$ko extends Translations$videoControls$en { @override String get playNext => '다음 재생'; @override String get playButton => '재생'; @override String get pauseButton => '일시정지'; + @override String get playbackPaused => '일시정지됨'; + @override String get playbackResumed => '재생 중'; + @override String get loadingVideo => '동영상 로딩 중...'; @override String get showPlaybackControls => '재생 컨트롤 표시'; @override String get hidePlaybackControls => '재생 컨트롤 숨기기'; @override String seekBackwardButton({required Object seconds}) => '${seconds}초 뒤로 이동'; @@ -725,6 +854,7 @@ class _Translations$messages$ko extends Translations$messages$en { ); @override String get removedFromContinueWatching => '계속 시청 목록에서 제거됨'; @override String errorLoading({required Object error}) => '오류: ${error}'; + @override String get searchPartialResults => '일부 미디어 서버를 검색하지 못했습니다. 사용 가능한 결과만 표시합니다.'; @override String get streamInterrupted => '스트림이 중단되었습니다. 재생을 누르거나 탐색하여 다시 시도하세요.'; @override String get liveStreamInterrupted => '라이브 스트림이 중단되었습니다. 재생을 눌러 다시 시도하세요.'; @override String get fileInfoNotAvailable => '파일 정보가 없습니다'; @@ -763,6 +893,8 @@ class _Translations$messages$ko extends Translations$messages$en { @override String get switchingToCompatiblePlayer => '호환되는 플레이어로 전환 중...'; @override String get serverLimitTitle => '재생 실패'; @override String get serverLimitBody => '서버 오류(HTTP 500). 대역폭/트랜스코딩 제한으로 세션이 거부된 것 같습니다. 소유자에게 조정을 요청하세요.'; + @override String get mediaUnreadableTitle => '파일을 사용할 수 없음'; + @override String get mediaUnreadableBody => '서버에서 이 항목을 찾았지만 파일을 읽을 수 없습니다(HTTP 404). 파일이 이동되거나 삭제되었거나 저장소가 오프라인 상태일 수 있습니다. 서버 관리자에게 파일 확인과 라이브러리 재스캔을 요청하세요.'; @override String get logsUploaded => '로그 업로드 완료'; @override String get logsUploadFailed => '로그 업로드 실패'; @override String get logId => '로그 ID'; @@ -916,6 +1048,8 @@ class _Translations$connections$ko extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => '${name}의 세션이 만료되었습니다'; @override String sessionExpiredMany({required Object count}) => '${count}개 서버의 세션이 만료되었습니다'; @override String get signInAgain => '다시 로그인'; + @override String editMediaBrowserTitle({required Object product}) => '${product} 연결 편집'; + @override String editMediaBrowserIntro({required Object serverName}) => '${serverName}의 URL을 추가하거나 제거하세요. Plezy는 연결 가능한 URL 중 지연 시간이 가장 낮은 URL을 사용합니다.'; } // Path: discover @@ -959,6 +1093,7 @@ class _Translations$errors$ko extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => '검색 실패: ${error}'; + @override String get searchUnavailable => '검색이 어떤 미디어 서버에도 연결할 수 없습니다.'; @override String connectionTimeout({required Object context}) => '${context} 로드 중 연결 시간 초과'; @override String get connectionFailed => '미디어 서버에 연결할 수 없습니다'; @override String unableToLoad({required Object context}) => '${context}을(를) 불러올 수 없습니다. 다시 시도하세요.'; @@ -1076,6 +1211,45 @@ class _Translations$logs$ko extends Translations$logs$en { @override String get uploadLogs => '로그 업로드'; } +// Path: startup +class _Translations$startup$ko extends Translations$startup$en { + _Translations$startup$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy를 시작하지 못했습니다'; + @override String get failedBody => '시작 중 문제가 발생했습니다. 아래 세부 정보에서 실패 원인을 확인할 수 있습니다.'; + @override String get failedBodyRepairable => 'Plezy의 저장된 설정 파일이 손상되어 Plezy를 시작하려면 먼저 파일을 다시 만들어야 합니다. 재시도해도 해결되지 않습니다 — 저장소 복구를 선택하세요.'; + @override String get phaseLabel => '단계'; + @override String get showDetails => '세부 정보 표시'; + @override String get hideDetails => '세부 정보 숨기기'; + @override String get copyDetails => '세부 정보 복사'; + @override String get detailsCopied => '세부 정보가 클립보드에 복사되었습니다'; + @override String get uploadDetails => '세부 정보 업로드'; + @override String get repairStorage => '저장소 복구'; + @override String get repairTitle => '저장된 데이터를 복구할까요?'; + @override String get repairBodyCommon => 'Plezy의 설정 파일이 손상되어 읽을 수 없습니다. 복구하면 모든 설정이 기본값으로 재설정됩니다.'; + @override String get repairBodyOneCredential => '저장된 로그인 정보 하나가 손상되어 읽을 수 없습니다. 복구하면 해당 로그인 정보만 제거되며 다른 설정은 그대로 유지됩니다.'; + @override String get repairBodySignInsKept => '서버와 프로필은 로그인 상태가 유지됩니다.'; + @override String get repairBodySignInsLost => '저장된 로그인 정보를 보호하는 키를 이 파일에서 복구할 수 없어 모든 서버와 프로필에 다시 로그인해야 합니다. 미디어 서버의 데이터에는 영향이 없습니다.'; + @override String get repairBodySessionsUncertain => '트래커(MAL, AniList, Simkl, Trakt)와 Seerr는 별도로 저장되며 유지 여부가 확실하지 않습니다. Plezy가 유지된 항목을 정확히 알려줄 것입니다.'; + @override String get repairConfirm => '복구'; + @override String get repairSucceeded => '저장소가 복구되었습니다'; + @override String get repairNeedsRestart => '저장소가 복구되었습니다 — 재시작 필요'; + @override String get restartRequiredBody => '데이터가 복구되었지만 Plezy는 이를 사용하려면 새로 시작해야 합니다. Plezy를 종료한 후 다시 열어주세요.'; + @override String get quitPlezy => 'Plezy 종료'; + @override String get repairFailed => '복구 실패'; + @override String get repairKeptSignIns => '서버와 프로필이 계속 로그인 상태입니다.'; + @override String get repairLostSignIns => '저장된 로그인 정보를 보호하는 키를 복구할 수 없었습니다. 모든 서버와 프로필에 다시 로그인해야 합니다.'; + @override String get repairLostSessions => '트래커 또는 Seerr 연결이 하나 이상 끊어져 다시 연결해야 합니다.'; + @override String get backupTitle => '손상된 파일의 복사본이 보관되었습니다'; + @override String get backupWarning => '로그인 자격 증명이 포함되어 있습니다. 업로드하거나 공유하지 마세요.'; + @override String get deleteBackup => '복사본 삭제'; + @override String get backupDeleted => '복사본이 삭제되었습니다.'; + @override String get previousFailureTitle => '지난번에 Plezy를 시작하지 못했습니다'; +} + // Path: licenses class _Translations$licenses$ko extends Translations$licenses$en { _Translations$licenses$ko._(TranslationsKo root) : this._root = root, super.internal(root); @@ -1130,6 +1304,19 @@ class _Translations$explore$ko extends Translations$explore$en { @override String searchEmpty({required Object query}) => '「${query}」에 대한 결과가 없습니다'; @override String searchPrompt({required Object source}) => '${source}에서 영화와 TV 프로그램을 검색하세요.'; @override String get searchFailed => '검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.'; + @override late final _Translations$explore$badge$ko badge = _Translations$explore$badge$ko._(_root); + @override late final _Translations$explore$stats$ko stats = _Translations$explore$stats$ko._(_root); + @override late final _Translations$explore$season$ko season = _Translations$explore$season$ko._(_root); + @override late final _Translations$explore$format$ko format = _Translations$explore$format$ko._(_root); + @override late final _Translations$explore$sourceMaterial$ko sourceMaterial = _Translations$explore$sourceMaterial$ko._(_root); + @override late final _Translations$explore$creditRole$ko creditRole = _Translations$explore$creditRole$ko._(_root); + @override late final _Translations$explore$relation$ko relation = _Translations$explore$relation$ko._(_root); + @override String broadcast({required Object day, required Object time}) => '${day} ${time} 방영'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '${day} ${time} ${timezone} 방영'; + @override late final _Translations$explore$detail$ko detail = _Translations$explore$detail$ko._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + other: '결과 ${n}개', + ); } // Path: liveTv @@ -1436,9 +1623,15 @@ class _Translations$downloads$ko extends Translations$downloads$en { @override String get editSyncRule => '동기화 규칙 편집'; @override String get removeSyncRule => '동기화 규칙 제거'; @override String removeSyncRuleConfirm({required Object title}) => '"${title}" 동기화를 중단하시겠습니까? 다운로드된 에피소드는 유지됩니다.'; + @override String removeListSyncRuleConfirm({required Object title}) => '"${title}" 동기화를 중지할까요?'; + @override String get deleteSyncRuleDownloads => '연결된 다운로드도 삭제'; + @override String get deleteSyncRuleDownloadsDescription => '다른 동기화 규칙이나 프로필에서 사용하는 다운로드는 유지됩니다.'; @override String syncRuleCreated({required Object count}) => '동기화 규칙 생성됨 — 미시청 에피소드 ${count}개 유지'; @override String get syncRuleUpdated => '동기화 규칙 업데이트됨'; @override String get syncRuleRemoved => '동기화 규칙 제거됨'; + @override String get syncRuleAndDownloadsRemoved => '동기화 규칙과 연결된 다운로드가 삭제되었습니다'; + @override String get syncRuleCleanupBusy => '동기화 규칙이 현재 업데이트 중입니다. 잠시 후 다시 시도하세요.'; + @override String get syncRuleCleanupUnavailable => '연결된 다운로드를 안전하게 확인할 수 없습니다. 서버에 다시 연결한 후 시도하거나, 다운로드를 삭제하지 않고 규칙만 제거하세요.'; @override String syncedNewEpisodes({required Object title, required Object count}) => '${title}의 새 에피소드 ${count}개 동기화됨'; @override String get activeSyncRules => '동기화 규칙'; @override String get noSyncRules => '동기화 규칙 없음'; @@ -1796,9 +1989,12 @@ class _Translations$addServer$ko extends Translations$addServer$en { final TranslationsKo _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product} 서버 추가'; @override String get serverUrls => '서버 URL'; @override String get serverUrlsHelper => '쉼표로 구분하여 여러 URL을 입력할 수 있습니다.'; @override String get findServer => '서버 찾기'; + @override String searchingLocalMediaBrowserServers({required Object product}) => '로컬 ${product} 서버를 찾는 중...'; + @override String localMediaBrowserServers({required Object product}) => '로컬 ${product} 서버'; @override String get username => '사용자 이름'; @override String get password => '비밀번호'; @override String get signIn => '로그인'; @@ -1810,15 +2006,39 @@ class _Translations$addServer$ko extends Translations$addServer$en { @override String get addPlexTitle => 'Plex로 로그인'; @override String get pinExpired => '로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.'; @override String failedToRegisterAccount({required Object error}) => '계정 등록 실패: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '${product} 서버 URL을 입력하세요'; @override String get addConnectionTitle => '연결 추가'; @override String addConnectionTitleScoped({required Object name}) => '${name}에 추가'; @override String get signInWithPlexCard => 'Plex로 로그인'; @override String get signInWithPlexCardSubtitle => '이 기기를 승인합니다. 공유 서버가 추가됩니다.'; @override String get signInWithPlexCardSubtitleScoped => 'Plex 계정을 승인합니다. Home 사용자는 프로필이 됩니다.'; + @override String connectToMediaBrowserCard({required Object product}) => '${product}에 연결'; + @override String get connectToMediaBrowserCardSubtitle => '서버 URL, 사용자 이름, 비밀번호를 입력하세요.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '${product} 서버에 로그인하세요. ${name}에 연결됩니다.'; @override String get borrowFromAnotherProfile => '다른 프로필에서 빌리기'; @override String get borrowFromAnotherProfileSubtitle => '다른 프로필의 연결을 재사용합니다. PIN으로 보호된 프로필에는 PIN이 필요합니다.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$ko extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get critic => '평론가'; + @override String get audience => '관객'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes 평론가'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes 관객'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$ko extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$ko._(TranslationsKo root) : this._root = root, super.internal(root); @@ -1982,6 +2202,184 @@ class _Translations$explore$status$ko extends Translations$explore$status$en { @override String get upcoming => '방영 예정'; } +// Path: explore.badge +class _Translations$explore$badge$ko extends Translations$explore$badge$en { + _Translations$explore$badge$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} 인기'; + @override String rankAiring({required Object n}) => '#${n} 방영 중'; + @override String rankRated({required Object n}) => '#${n} 평가'; + @override String rankFavorited({required Object n}) => '#${n} 즐겨찾기'; + @override String rankTrending({required Object n}) => '#${n} 트렌드'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} ${season}'; + @override String watchingNow({required Object n}) => '${n}명 시청 중'; + @override String get available => '이용 가능'; + @override String get partiallyAvailable => '부분 이용 가능'; + @override String get availableIn4k => '4K 이용 가능'; + @override String get requested => '요청됨'; + @override String get pendingApproval => '승인 대기 중'; + @override String get processing => '처리 중'; + @override String get declined => '거절됨'; + @override String get requestFailed => '요청 실패'; + @override String get requested4k => '4K 요청됨'; + @override String seasonsAvailable({required Object available, required Object total}) => '시즌 ${available}/${total}'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => '${episode}화 · ${duration} 후'; + @override String nextAiringIn({required Object duration}) => '${duration} 후 다음 화'; + @override String episodesShort({required Object n}) => '${n}화'; + @override String minutesPerEpisode({required Object n}) => '${n}분/화'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$ko extends Translations$explore$stats$en { + _Translations$explore$stats$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n}명 등록'; + @override String viewersDay({required Object n}) => '오늘 ${n}명 시청'; + @override String viewersWeek({required Object n}) => '이번 주 ${n}명 시청'; + @override String viewersMonth({required Object n}) => '이번 달 ${n}명 시청'; + @override String viewersYear({required Object n}) => '올해 ${n}명 시청'; + @override String viewersAllTime({required Object n}) => '시청자 ${n}명'; + @override String planning({required Object n}) => '${n}명 볼 예정'; + @override String favorited({required Object n}) => '즐겨찾기 ${n}명'; + @override String dropRate({required Object percent}) => '${percent} 하차'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + other: '댓글 ${n}개', + ); + @override String votes({required Object n}) => '투표 ${n}개'; + @override String watching({required Object n}) => '시청 중 ${n}명'; + @override String completed({required Object n}) => '완료 ${n}명'; + @override String onHold({required Object n}) => '보류 ${n}명'; + @override String dropped({required Object n}) => '하차 ${n}명'; +} + +// Path: explore.season +class _Translations$explore$season$ko extends Translations$explore$season$en { + _Translations$explore$season$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get winter => '겨울'; + @override String get spring => '봄'; + @override String get summer => '여름'; + @override String get fall => '가을'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}년'; +} + +// Path: explore.format +class _Translations$explore$format$ko extends Translations$explore$format$en { + _Translations$explore$format$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV 단편'; + @override String get movie => '영화'; + @override String get special => '스페셜'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => '음악'; + @override String get other => '기타'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$ko extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get original => '오리지널'; + @override String get manga => '만화'; + @override String get lightNovel => '라이트 노벨'; + @override String get novel => '소설'; + @override String get visualNovel => '비주얼 노벨'; + @override String get game => '게임'; + @override String get webComic => '웹툰'; + @override String get musicRelease => '음악'; + @override String get otherMedia => '기타'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$ko extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get director => '감독'; + @override String get writer => '각본'; + @override String get producer => '프로듀서'; + @override String get creator => '제작자'; + @override String get composer => '작곡'; +} + +// Path: explore.relation +class _Translations$explore$relation$ko extends Translations$explore$relation$en { + _Translations$explore$relation$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get prequel => '프리퀄'; + @override String get sequel => '시퀄'; + @override String get sideStory => '사이드 스토리'; + @override String get spinOff => '스핀오프'; + @override String get alternativeVersion => '대체 버전'; + @override String get summary => '요약'; + @override String get parentStory => '원작'; + @override String get adaptation => '각색'; + @override String get other => '관련'; +} + +// Path: explore.detail +class _Translations$explore$detail$ko extends Translations$explore$detail$en { + _Translations$explore$detail$ko._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get originalTitle => '원제'; + @override String get alsoKnownAs => '다른 이름'; + @override String get studios => '스튜디오'; + @override String get country => '국가'; + @override String get language => '언어'; + @override String get released => '출시일'; + @override String get physicalRelease => '디스크 출시'; + @override String get ended => '종영'; + @override String addedOn({required Object date}) => '${date}에 추가됨'; + @override String get yourRating => '내 평점'; + @override String get budget => '제작비'; + @override String get revenue => '흥행 수익'; + @override String get contentAdvisory => '연령 등급'; + @override String get tags => '태그'; + @override String get revealSpoilerTags => '스포일러 태그 표시'; + @override String get links => '링크'; + @override String get watchOn => '시청처'; + @override String get watchTrailer => '예고편 보기'; + @override String openOn({required Object site}) => '${site}에서 열기'; + @override String get crew => '제작진'; + @override String get ratings => '평점'; + @override String get schedule => '방영 일정'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + other: '사용자 ${n}명이 추천', + ); + @override String recommendedBy({required Object who}) => '${who} 추천'; + @override String favoritedBy({required Object who}) => '${who} 즐겨찾기'; + @override String unairedEpisodes({required Object n}) => '미방영 ${n}개'; + @override String recommendedByPercent({required Object percent}) => '시청자의 ${percent} 추천'; + @override String get relatedTitles => '관련 작품'; + @override String get background => '배경'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$ko extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$ko._(TranslationsKo root) : this._root = root, super.internal(root); @@ -2125,6 +2523,7 @@ class _Translations$services$names$ko extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2194,6 +2593,7 @@ extension on TranslationsKo { 'auth.waitingForAuth' => '인증 대기 중...\n브라우저에서 로그인하세요.', 'auth.useBrowser' => '브라우저 사용', 'auth.or' => '또는', + 'auth.connectToMediaBrowser' => ({required Object product}) => '${product}에 연결', 'auth.useQuickConnect' => 'Quick Connect 사용', 'auth.quickConnectInstructions' => 'Jellyfin에서 Quick Connect를 열고 이 코드를 입력하세요.', 'auth.quickConnectWaiting' => '승인 대기 중…', @@ -2245,6 +2645,17 @@ extension on TranslationsKo { 'common.fullscreen' => '전체 화면', 'common.exitFullscreen' => '전체 화면 종료', 'common.pressBackAgainToExit' => '한 번 더 누르면 종료됩니다', + 'common.ratingSource.critic' => '평론가', + 'common.ratingSource.audience' => '관객', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes 평론가', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes 관객', 'screens.licenses' => '라이선스', 'screens.switchProfile' => '프로필 전환', 'screens.subtitleStyling' => '자막 스타일 설정', @@ -2281,6 +2692,7 @@ extension on TranslationsKo { 'settings.darkTheme' => '다크', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => '라이브러리 표시 밀도', + 'settings.displayScale' => '표시 배율', 'settings.compact' => '조밀하게', 'settings.comfortable' => '여유롭게', 'settings.tvCornerSpotlightBackdrop' => '모서리 스포트라이트 배경', @@ -2330,6 +2742,11 @@ extension on TranslationsKo { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => '자동 (권장)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB 메모리를 사용할 수 있습니다. ${size}MB 버퍼는 재생에 영향을 줄 수 있습니다.', + 'settings.playbackBuffer' => '재생 버퍼', + 'settings.playbackBufferAuto' => '자동 (권장)', + 'settings.playbackBufferLarge' => '대형', + 'settings.playbackBufferExtraLarge' => '초대형', + 'settings.playbackBufferDescription' => '불안정한 연결에 대비해 더 많은 버퍼를 사용합니다. 버퍼 크기에 의해서도 제한됩니다.', 'settings.defaultQualityTitle' => '기본 화질', 'settings.musicQualityTitle' => '음악 음질', 'settings.subtitleStyling' => '자막 스타일', @@ -2363,6 +2780,9 @@ extension on TranslationsKo { 'settings.debugLoggingDescription' => '문제 해결을 위해 상세 로깅 활성화', 'settings.viewLogs' => '로그 보기', 'settings.viewLogsDescription' => '애플리케이션 로그 확인', + 'settings.clearImageCache' => '이미지 캐시 지우기', + 'settings.clearImageCacheDescription' => '캐시된 아트워크와 썸네일을 지웁니다. 다시 다운로드할 때까지 이미지가 느리게 로드될 수 있습니다.', + 'settings.clearImageCacheSuccess' => '이미지 캐시를 성공적으로 지웠습니다', 'settings.resetSettings' => '설정 재설정', 'settings.resetSettingsDescription' => '기본 설정으로 복원합니다. 되돌릴 수 없습니다.', 'settings.resetSettingsSuccess' => '설정 재설정 성공', @@ -2546,29 +2966,118 @@ extension on TranslationsKo { 'hotkeys.actions.skipMarker' => '인트로/크레딧 건너뛰기', 'hotkeys.actions.screenshot' => '스크린샷 찍기', 'fileInfo.title' => '파일 정보', + 'fileInfo.overview' => '개요', 'fileInfo.video' => '비디오', 'fileInfo.audio' => '오디오', 'fileInfo.subtitles' => '자막', + 'fileInfo.images' => '내장 이미지', + 'fileInfo.dataStreams' => '데이터 스트림', + 'fileInfo.lyrics' => '가사', 'fileInfo.file' => '파일', + 'fileInfo.attachments' => '첨부 파일', + 'fileInfo.delivery' => '재생 방식', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => '버전 ${index} / ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => '파일 ${index} / ${count}', + 'fileInfo.noStreams' => '서버에서 이 파일에 대한 스트림 정보를 보고하지 않았습니다.', + 'fileInfo.copyPath' => '경로 복사', + 'fileInfo.pathCopied' => '파일 경로가 복사되었습니다', 'fileInfo.codec' => '코덱', + 'fileInfo.codecTag' => '코덱 태그', 'fileInfo.resolution' => '해상도', + 'fileInfo.codedResolution' => '코딩 해상도', 'fileInfo.bitrate' => '비트레이트', 'fileInfo.frameRate' => '프레임 속도', + 'fileInfo.rotation' => '회전', + 'fileInfo.comment' => '주석', + 'fileInfo.audioDescription' => '오디오 설명', + 'fileInfo.headerCompression' => '헤더 압축', + 'fileInfo.sidecarFile' => '사이드카 파일', + 'fileInfo.transportTimestamp' => '전송 타임스탬프', + 'fileInfo.displayOffset' => '표시 오프셋', + 'fileInfo.previewFailureCode' => '미리보기 오류 코드', + 'fileInfo.previewRetries' => '미리보기 재시도 횟수', 'fileInfo.aspectRatio' => '종횡비', + 'fileInfo.pixelAspectRatio' => '픽셀 종횡비', 'fileInfo.profile' => '프로파일', + 'fileInfo.level' => '레벨', 'fileInfo.bitDepth' => '비트 심도', + 'fileInfo.pixelFormat' => '픽셀 포맷', 'fileInfo.colorSpace' => '색 공간', 'fileInfo.colorRange' => '색 범위', 'fileInfo.colorPrimaries' => '색 원색', + 'fileInfo.colorTransfer' => '색상 전송', 'fileInfo.chromaSubsampling' => '색차 서브샘플링', + 'fileInfo.chromaLocation' => '크로마 위치', + 'fileInfo.scanType' => '주사 방식', + 'fileInfo.interlaced' => '비월 주사', + 'fileInfo.anamorphic' => '아나모픽', + 'fileInfo.referenceFrames' => '참조 프레임', + 'fileInfo.dynamicRange' => '동적 범위', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision 레벨', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision 버전', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision 레이어', + 'fileInfo.baseLayerCompatibility' => '베이스 레이어 호환성', + 'fileInfo.avcBitstream' => 'AVC 비트스트림', + 'fileInfo.nalLengthSize' => 'NAL 길이 크기', + 'fileInfo.scalingMatrix' => '사용자 지정 스케일링 매트릭스', + 'fileInfo.streamIdentifier' => '스트림 식별자', + 'fileInfo.streamIndex' => '스트림 인덱스', + 'fileInfo.streamId' => '스트림 ID', + 'fileInfo.language' => '언어', + 'fileInfo.languageCode' => '언어 코드', + 'fileInfo.streamTitle' => '트랙 제목', 'fileInfo.channels' => '채널', + 'fileInfo.sampleRate' => '샘플 레이트', + 'fileInfo.spatialAudio' => '공간 오디오', + 'fileInfo.textBased' => '텍스트 기반', + 'fileInfo.subtitleFormat' => '사이드카 포맷', + 'fileInfo.provider' => '제공자', + 'fileInfo.matchScore' => '일치 점수', + 'fileInfo.externalDelivery' => '별도 제공 가능', + 'fileInfo.sidecarPath' => '사이드카 경로', + 'fileInfo.sourceStream' => '복사 출처', + 'fileInfo.temporary' => '임시', + 'fileInfo.timeBase' => '시간 기준', 'fileInfo.overallBitrate' => '전체 비트레이트', 'fileInfo.path' => '경로', + 'fileInfo.fileName' => '파일 이름', 'fileInfo.size' => '크기', + 'fileInfo.totalSize' => '총 크기', 'fileInfo.container' => '컨테이너', 'fileInfo.duration' => '재생 시간', + 'fileInfo.previewThumbnails' => '미리보기 썸네일', + 'fileInfo.previewIndex' => '미리보기 인덱스', + 'fileInfo.packetLength' => '패킷 길이', + 'fileInfo.filePresent' => '파일 있음', + 'fileInfo.fileReadable' => '서버에서 읽기 가능', + 'fileInfo.streamPath' => '스트림 경로', 'fileInfo.optimizedForStreaming' => '스트리밍 최적화', 'fileInfo.has64bitOffsets' => '64비트 오프셋', + 'fileInfo.protocol' => '프로토콜', + 'fileInfo.mediaType' => '미디어 유형', + 'fileInfo.sourceKind' => '소스 종류', + 'fileInfo.optimizedVersion' => '최적화 버전', + 'fileInfo.optimizationTarget' => '최적화 대상', + 'fileInfo.deletedAt' => '삭제됨', + 'fileInfo.remoteSource' => '원격 소스', + 'fileInfo.infiniteStream' => '무한 스트림', + 'fileInfo.directPlay' => 'Direct Play', + 'fileInfo.directStream' => 'Direct Stream', + 'fileInfo.transcoding' => '트랜스코딩', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => '버전 ID', + 'fileInfo.fileId' => '파일 ID', + 'fileInfo.defaultAudioTrack' => '기본 오디오 트랙', + 'fileInfo.defaultSubtitleTrack' => '기본 자막 트랙', + 'fileInfo.subtitlesOff' => '꺼짐', + 'fileInfo.flagDefault' => '기본', + 'fileInfo.flagForced' => '강제', + 'fileInfo.flagSelected' => '선택됨', + 'fileInfo.flagExternal' => '외부', + 'fileInfo.flagHearingImpaired' => '청각 장애인용', + 'fileInfo.flagDub' => '더빙', + 'fileInfo.flagOriginal' => '원본', 'mediaMenu.markAsWatched' => '시청 완료로 표시', 'mediaMenu.markAsUnwatched' => '미시청으로 표시', 'mediaMenu.removeFromContinueWatching' => '계속 보기에서 제거', @@ -2577,7 +3086,28 @@ extension on TranslationsKo { 'mediaMenu.shufflePlay' => '무작위 재생', 'mediaMenu.shuffleNotAvailableOffline' => '오프라인에서는 무작위 재생을 사용할 수 없습니다', 'mediaMenu.fileInfo' => '파일 정보', + 'mediaMenu.deleteEpisodeFromServer' => '서버에서 에피소드 삭제', + 'mediaMenu.deleteSeasonFromServer' => '서버에서 시즌 삭제', + 'mediaMenu.deleteShowFromServer' => '서버에서 프로그램 삭제', + 'mediaMenu.deleteMovieFromServer' => '서버에서 영화 삭제', + 'mediaMenu.deleteEpisodeTitle' => '이 에피소드를 삭제할까요?', + 'mediaMenu.deleteSeasonTitle' => '이 시즌을 삭제할까요?', + 'mediaMenu.deleteShowTitle' => '이 프로그램을 삭제할까요?', + 'mediaMenu.deleteMovieTitle' => '이 영화를 삭제할까요?', + 'mediaMenu.deleteEpisodeConfirm' => '에피소드 삭제', + 'mediaMenu.deleteSeasonConfirm' => '시즌 삭제', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => '프로그램 삭제', + 'mediaMenu.deleteMovieConfirm' => '영화 삭제', + 'mediaMenu.deleteAnyway' => '그래도 삭제', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '서버에서 ${title}을(를) 영구 삭제할까요?', 'mediaMenu.deleteMultipleWarning' => '모든 에피소드와 파일이 포함됩니다.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '포함된 에피소드 ${n}개와 해당 파일이 모두 삭제됩니다.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '이 항목은 파일 ${n}개에 걸쳐 저장되어 있으며, 모든 파일이 삭제됩니다.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '같은 파일에 저장된 다른 에피소드 ${n}개도 함께 삭제됩니다:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy가 어떤 파일이 삭제될지 확인하지 못해 위 항목보다 더 많은 파일이 삭제될 수 있습니다. 취소하고 다시 시도하거나 그래도 삭제하세요.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => '서버가 이 항목의 파일 정보를 제공하지 않아 Plezy가 어떤 파일이 삭제될지 확인할 수 없습니다. 위 항목보다 더 많은 파일이 삭제될 수 있습니다.', 'mediaMenu.mediaDeletedSuccessfully' => '미디어 항목이 성공적으로 삭제되었습니다', 'mediaMenu.mediaFailedToDelete' => '미디어 항목 삭제 실패', 'mediaMenu.rate' => '평가', @@ -2643,6 +3173,9 @@ extension on TranslationsKo { 'videoControls.playNext' => '다음 재생', 'videoControls.playButton' => '재생', 'videoControls.pauseButton' => '일시정지', + 'videoControls.playbackPaused' => '일시정지됨', + 'videoControls.playbackResumed' => '재생 중', + 'videoControls.loadingVideo' => '동영상 로딩 중...', 'videoControls.showPlaybackControls' => '재생 컨트롤 표시', 'videoControls.hidePlaybackControls' => '재생 컨트롤 숨기기', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds}초 뒤로 이동', @@ -2697,8 +3230,6 @@ extension on TranslationsKo { 'videoControls.subtitleDownloaded' => '자막이 다운로드되었습니다', 'videoControls.subtitleDownloadedNotApplied' => '자막을 다운로드했지만 선택할 수 없습니다', 'videoControls.subtitleDownloadFailed' => '자막 다운로드에 실패했습니다', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => '언어 검색...', 'messages.markedAsWatched' => '시청 완료로 표시됨', 'messages.markedAsUnwatched' => '미시청으로 표시됨', @@ -2708,6 +3239,7 @@ extension on TranslationsKo { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '시청한 다운로드 ${n}개를 자동 삭제했습니다', ), 'messages.removedFromContinueWatching' => '계속 시청 목록에서 제거됨', 'messages.errorLoading' => ({required Object error}) => '오류: ${error}', + 'messages.searchPartialResults' => '일부 미디어 서버를 검색하지 못했습니다. 사용 가능한 결과만 표시합니다.', 'messages.streamInterrupted' => '스트림이 중단되었습니다. 재생을 누르거나 탐색하여 다시 시도하세요.', 'messages.liveStreamInterrupted' => '라이브 스트림이 중단되었습니다. 재생을 눌러 다시 시도하세요.', 'messages.fileInfoNotAvailable' => '파일 정보가 없습니다', @@ -2746,6 +3278,8 @@ extension on TranslationsKo { 'messages.switchingToCompatiblePlayer' => '호환되는 플레이어로 전환 중...', 'messages.serverLimitTitle' => '재생 실패', 'messages.serverLimitBody' => '서버 오류(HTTP 500). 대역폭/트랜스코딩 제한으로 세션이 거부된 것 같습니다. 소유자에게 조정을 요청하세요.', + 'messages.mediaUnreadableTitle' => '파일을 사용할 수 없음', + 'messages.mediaUnreadableBody' => '서버에서 이 항목을 찾았지만 파일을 읽을 수 없습니다(HTTP 404). 파일이 이동되거나 삭제되었거나 저장소가 오프라인 상태일 수 있습니다. 서버 관리자에게 파일 확인과 라이브러리 재스캔을 요청하세요.', 'messages.logsUploaded' => '로그 업로드 완료', 'messages.logsUploadFailed' => '로그 업로드 실패', 'messages.logId' => '로그 ID', @@ -2854,6 +3388,8 @@ extension on TranslationsKo { 'connections.sessionExpiredOne' => ({required Object name}) => '${name}의 세션이 만료되었습니다', 'connections.sessionExpiredMany' => ({required Object count}) => '${count}개 서버의 세션이 만료되었습니다', 'connections.signInAgain' => '다시 로그인', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '${product} 연결 편집', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '${serverName}의 URL을 추가하거나 제거하세요. Plezy는 연결 가능한 URL 중 지연 시간이 가장 낮은 URL을 사용합니다.', 'discover.title' => '둘러보기', 'discover.noContentAvailable' => '사용 가능한 콘텐츠가 없습니다', 'discover.addMediaToLibraries' => '미디어 라이브러리에 미디어를 추가해 주세요', @@ -2879,6 +3415,7 @@ extension on TranslationsKo { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes}분 남음', 'discover.moreLikeThis' => '비슷한 콘텐츠', 'errors.searchFailed' => ({required Object error}) => '검색 실패: ${error}', + 'errors.searchUnavailable' => '검색이 어떤 미디어 서버에도 연결할 수 없습니다.', 'errors.connectionTimeout' => ({required Object context}) => '${context} 로드 중 연결 시간 초과', 'errors.connectionFailed' => '미디어 서버에 연결할 수 없습니다', 'errors.unableToLoad' => ({required Object context}) => '${context}을(를) 불러올 수 없습니다. 다시 시도하세요.', @@ -2986,6 +3523,36 @@ extension on TranslationsKo { 'logs.clearLogs' => '로그 지우기', 'logs.copyLogs' => '로그 복사', 'logs.uploadLogs' => '로그 업로드', + 'startup.failedTitle' => 'Plezy를 시작하지 못했습니다', + 'startup.failedBody' => '시작 중 문제가 발생했습니다. 아래 세부 정보에서 실패 원인을 확인할 수 있습니다.', + 'startup.failedBodyRepairable' => 'Plezy의 저장된 설정 파일이 손상되어 Plezy를 시작하려면 먼저 파일을 다시 만들어야 합니다. 재시도해도 해결되지 않습니다 — 저장소 복구를 선택하세요.', + 'startup.phaseLabel' => '단계', + 'startup.showDetails' => '세부 정보 표시', + 'startup.hideDetails' => '세부 정보 숨기기', + 'startup.copyDetails' => '세부 정보 복사', + 'startup.detailsCopied' => '세부 정보가 클립보드에 복사되었습니다', + 'startup.uploadDetails' => '세부 정보 업로드', + 'startup.repairStorage' => '저장소 복구', + 'startup.repairTitle' => '저장된 데이터를 복구할까요?', + 'startup.repairBodyCommon' => 'Plezy의 설정 파일이 손상되어 읽을 수 없습니다. 복구하면 모든 설정이 기본값으로 재설정됩니다.', + 'startup.repairBodyOneCredential' => '저장된 로그인 정보 하나가 손상되어 읽을 수 없습니다. 복구하면 해당 로그인 정보만 제거되며 다른 설정은 그대로 유지됩니다.', + 'startup.repairBodySignInsKept' => '서버와 프로필은 로그인 상태가 유지됩니다.', + 'startup.repairBodySignInsLost' => '저장된 로그인 정보를 보호하는 키를 이 파일에서 복구할 수 없어 모든 서버와 프로필에 다시 로그인해야 합니다. 미디어 서버의 데이터에는 영향이 없습니다.', + 'startup.repairBodySessionsUncertain' => '트래커(MAL, AniList, Simkl, Trakt)와 Seerr는 별도로 저장되며 유지 여부가 확실하지 않습니다. Plezy가 유지된 항목을 정확히 알려줄 것입니다.', + 'startup.repairConfirm' => '복구', + 'startup.repairSucceeded' => '저장소가 복구되었습니다', + 'startup.repairNeedsRestart' => '저장소가 복구되었습니다 — 재시작 필요', + 'startup.restartRequiredBody' => '데이터가 복구되었지만 Plezy는 이를 사용하려면 새로 시작해야 합니다. Plezy를 종료한 후 다시 열어주세요.', + 'startup.quitPlezy' => 'Plezy 종료', + 'startup.repairFailed' => '복구 실패', + 'startup.repairKeptSignIns' => '서버와 프로필이 계속 로그인 상태입니다.', + 'startup.repairLostSignIns' => '저장된 로그인 정보를 보호하는 키를 복구할 수 없었습니다. 모든 서버와 프로필에 다시 로그인해야 합니다.', + 'startup.repairLostSessions' => '트래커 또는 Seerr 연결이 하나 이상 끊어져 다시 연결해야 합니다.', + 'startup.backupTitle' => '손상된 파일의 복사본이 보관되었습니다', + 'startup.backupWarning' => '로그인 자격 증명이 포함되어 있습니다. 업로드하거나 공유하지 마세요.', + 'startup.deleteBackup' => '복사본 삭제', + 'startup.backupDeleted' => '복사본이 삭제되었습니다.', + 'startup.previousFailureTitle' => '지난번에 Plezy를 시작하지 못했습니다', 'licenses.relatedPackages' => '관련 소프트웨어 패키지', 'licenses.license' => '라이선스', 'licenses.licenseNumber' => ({required Object number}) => '라이선스 ${number}', @@ -3029,6 +3596,113 @@ extension on TranslationsKo { 'explore.searchEmpty' => ({required Object query}) => '「${query}」에 대한 결과가 없습니다', 'explore.searchPrompt' => ({required Object source}) => '${source}에서 영화와 TV 프로그램을 검색하세요.', 'explore.searchFailed' => '검색에 실패했습니다. 연결을 확인하고 다시 시도하세요.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} 인기', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} 방영 중', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} 평가', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} 즐겨찾기', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} 트렌드', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n}명 시청 중', + 'explore.badge.available' => '이용 가능', + 'explore.badge.partiallyAvailable' => '부분 이용 가능', + 'explore.badge.availableIn4k' => '4K 이용 가능', + 'explore.badge.requested' => '요청됨', + 'explore.badge.pendingApproval' => '승인 대기 중', + 'explore.badge.processing' => '처리 중', + 'explore.badge.declined' => '거절됨', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => '요청 실패', + 'explore.badge.requested4k' => '4K 요청됨', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '시즌 ${available}/${total}', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => '${episode}화 · ${duration} 후', + 'explore.badge.nextAiringIn' => ({required Object duration}) => '${duration} 후 다음 화', + 'explore.badge.episodesShort' => ({required Object n}) => '${n}화', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n}분/화', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n}명 등록', + 'explore.stats.viewersDay' => ({required Object n}) => '오늘 ${n}명 시청', + 'explore.stats.viewersWeek' => ({required Object n}) => '이번 주 ${n}명 시청', + 'explore.stats.viewersMonth' => ({required Object n}) => '이번 달 ${n}명 시청', + 'explore.stats.viewersYear' => ({required Object n}) => '올해 ${n}명 시청', + 'explore.stats.viewersAllTime' => ({required Object n}) => '시청자 ${n}명', + 'explore.stats.planning' => ({required Object n}) => '${n}명 볼 예정', + 'explore.stats.favorited' => ({required Object n}) => '즐겨찾기 ${n}명', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} 하차', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '댓글 ${n}개', ), + 'explore.stats.votes' => ({required Object n}) => '투표 ${n}개', + 'explore.stats.watching' => ({required Object n}) => '시청 중 ${n}명', + 'explore.stats.completed' => ({required Object n}) => '완료 ${n}명', + 'explore.stats.onHold' => ({required Object n}) => '보류 ${n}명', + 'explore.stats.dropped' => ({required Object n}) => '하차 ${n}명', + 'explore.season.winter' => '겨울', + 'explore.season.spring' => '봄', + 'explore.season.summer' => '여름', + 'explore.season.fall' => '가을', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}년', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV 단편', + 'explore.format.movie' => '영화', + 'explore.format.special' => '스페셜', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => '음악', + 'explore.format.other' => '기타', + 'explore.sourceMaterial.original' => '오리지널', + 'explore.sourceMaterial.manga' => '만화', + 'explore.sourceMaterial.lightNovel' => '라이트 노벨', + 'explore.sourceMaterial.novel' => '소설', + 'explore.sourceMaterial.visualNovel' => '비주얼 노벨', + 'explore.sourceMaterial.game' => '게임', + 'explore.sourceMaterial.webComic' => '웹툰', + 'explore.sourceMaterial.musicRelease' => '음악', + 'explore.sourceMaterial.otherMedia' => '기타', + 'explore.creditRole.director' => '감독', + 'explore.creditRole.writer' => '각본', + 'explore.creditRole.producer' => '프로듀서', + 'explore.creditRole.creator' => '제작자', + 'explore.creditRole.composer' => '작곡', + 'explore.relation.prequel' => '프리퀄', + 'explore.relation.sequel' => '시퀄', + 'explore.relation.sideStory' => '사이드 스토리', + 'explore.relation.spinOff' => '스핀오프', + 'explore.relation.alternativeVersion' => '대체 버전', + 'explore.relation.summary' => '요약', + 'explore.relation.parentStory' => '원작', + 'explore.relation.adaptation' => '각색', + 'explore.relation.other' => '관련', + 'explore.broadcast' => ({required Object day, required Object time}) => '${day} ${time} 방영', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '${day} ${time} ${timezone} 방영', + 'explore.detail.originalTitle' => '원제', + 'explore.detail.alsoKnownAs' => '다른 이름', + 'explore.detail.studios' => '스튜디오', + 'explore.detail.country' => '국가', + 'explore.detail.language' => '언어', + 'explore.detail.released' => '출시일', + 'explore.detail.physicalRelease' => '디스크 출시', + 'explore.detail.ended' => '종영', + 'explore.detail.addedOn' => ({required Object date}) => '${date}에 추가됨', + 'explore.detail.yourRating' => '내 평점', + 'explore.detail.budget' => '제작비', + 'explore.detail.revenue' => '흥행 수익', + 'explore.detail.contentAdvisory' => '연령 등급', + 'explore.detail.tags' => '태그', + 'explore.detail.revealSpoilerTags' => '스포일러 태그 표시', + 'explore.detail.links' => '링크', + 'explore.detail.watchOn' => '시청처', + 'explore.detail.watchTrailer' => '예고편 보기', + 'explore.detail.openOn' => ({required Object site}) => '${site}에서 열기', + 'explore.detail.crew' => '제작진', + 'explore.detail.ratings' => '평점', + 'explore.detail.schedule' => '방영 일정', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '사용자 ${n}명이 추천', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '${who} 추천', + 'explore.detail.favoritedBy' => ({required Object who}) => '${who} 즐겨찾기', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '미방영 ${n}개', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => '시청자의 ${percent} 추천', + 'explore.detail.relatedTitles' => '관련 작품', + 'explore.detail.background' => '배경', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '결과 ${n}개', ), 'liveTv.title' => '실시간 TV', 'liveTv.guide' => '편성표', 'liveTv.noChannels' => '사용 가능한 채널이 없습니다', @@ -3211,8 +3885,6 @@ extension on TranslationsKo { 'watchTogether.relayUnreachable' => '릴레이 서버에 연결할 수 없습니다. ISP 차단으로 함께 보기를 사용하지 못할 수 있습니다.', 'watchTogether.reconnectingToHost' => '호스트에 재연결 중...', 'watchTogether.currentPlayback' => '현재 재생', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => '현재 재생 참여', 'watchTogether.joinCurrentPlaybackDescription' => '호스트가 현재 시청 중인 콘텐츠로 이동합니다', 'watchTogether.failedToOpenCurrentPlayback' => '현재 재생을 열 수 없습니다', @@ -3281,9 +3953,15 @@ extension on TranslationsKo { 'downloads.editSyncRule' => '동기화 규칙 편집', 'downloads.removeSyncRule' => '동기화 규칙 제거', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => '"${title}" 동기화를 중단하시겠습니까? 다운로드된 에피소드는 유지됩니다.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => '"${title}" 동기화를 중지할까요?', + 'downloads.deleteSyncRuleDownloads' => '연결된 다운로드도 삭제', + 'downloads.deleteSyncRuleDownloadsDescription' => '다른 동기화 규칙이나 프로필에서 사용하는 다운로드는 유지됩니다.', 'downloads.syncRuleCreated' => ({required Object count}) => '동기화 규칙 생성됨 — 미시청 에피소드 ${count}개 유지', 'downloads.syncRuleUpdated' => '동기화 규칙 업데이트됨', 'downloads.syncRuleRemoved' => '동기화 규칙 제거됨', + 'downloads.syncRuleAndDownloadsRemoved' => '동기화 규칙과 연결된 다운로드가 삭제되었습니다', + 'downloads.syncRuleCleanupBusy' => '동기화 규칙이 현재 업데이트 중입니다. 잠시 후 다시 시도하세요.', + 'downloads.syncRuleCleanupUnavailable' => '연결된 다운로드를 안전하게 확인할 수 없습니다. 서버에 다시 연결한 후 시도하거나, 다운로드를 삭제하지 않고 규칙만 제거하세요.', 'downloads.syncedNewEpisodes' => ({required Object title, required Object count}) => '${title}의 새 에피소드 ${count}개 동기화됨', 'downloads.activeSyncRules' => '동기화 규칙', 'downloads.noSyncRules' => '동기화 규칙 없음', @@ -3446,6 +4124,8 @@ extension on TranslationsKo { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'DV RPU 평균', 'performanceOverlay.dvSampleAverage' => 'DV 샘플 평균', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => '최대 휘도', 'performanceOverlay.minLuma' => '최소 휘도', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3615,6 +4295,7 @@ extension on TranslationsKo { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => '${service}에서 Plezy 활성화', 'services.deviceCode.body' => ({required Object url}) => '${url}을 방문하여 이 코드를 입력하세요:', 'services.deviceCode.openToActivate' => ({required Object service}) => '활성화하려면 ${service} 열기', @@ -3638,9 +4319,12 @@ extension on TranslationsKo { 'services.libraryFilter.modeHintWhitelist' => '아래에 선택한 라이브러리만 동기화합니다.', 'services.libraryFilter.libraries' => '라이브러리', 'services.libraryFilter.noLibraries' => '사용 가능한 라이브러리가 없습니다', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product} 서버 추가', 'addServer.serverUrls' => '서버 URL', 'addServer.serverUrlsHelper' => '쉼표로 구분하여 여러 URL을 입력할 수 있습니다.', 'addServer.findServer' => '서버 찾기', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => '로컬 ${product} 서버를 찾는 중...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => '로컬 ${product} 서버', 'addServer.username' => '사용자 이름', 'addServer.password' => '비밀번호', 'addServer.signIn' => '로그인', @@ -3652,11 +4336,15 @@ extension on TranslationsKo { 'addServer.addPlexTitle' => 'Plex로 로그인', 'addServer.pinExpired' => '로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.', 'addServer.failedToRegisterAccount' => ({required Object error}) => '계정 등록 실패: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '${product} 서버 URL을 입력하세요', 'addServer.addConnectionTitle' => '연결 추가', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name}에 추가', 'addServer.signInWithPlexCard' => 'Plex로 로그인', 'addServer.signInWithPlexCardSubtitle' => '이 기기를 승인합니다. 공유 서버가 추가됩니다.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Plex 계정을 승인합니다. Home 사용자는 프로필이 됩니다.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '${product}에 연결', + 'addServer.connectToMediaBrowserCardSubtitle' => '서버 URL, 사용자 이름, 비밀번호를 입력하세요.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '${product} 서버에 로그인하세요. ${name}에 연결됩니다.', 'addServer.borrowFromAnotherProfile' => '다른 프로필에서 빌리기', 'addServer.borrowFromAnotherProfileSubtitle' => '다른 프로필의 연결을 재사용합니다. PIN으로 보호된 프로필에는 PIN이 필요합니다.', _ => null, diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index d8d368a7..ac482694 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -67,6 +67,7 @@ class TranslationsNb extends Translations with BaseTranslations 'Venter på autentisering...\nLogg inn fra nettleseren.'; @override String get useBrowser => 'Bruk nettleser'; @override String get or => 'eller'; + @override String connectToMediaBrowser({required Object product}) => 'Koble til ${product}'; @override String get useQuickConnect => 'Bruk Quick Connect'; @override String get quickConnectInstructions => 'Åpne Quick Connect i Jellyfin og skriv inn denne koden.'; @override String get quickConnectWaiting => 'Venter på godkjenning…'; @@ -175,6 +177,7 @@ class _Translations$common$nb extends Translations$common$en { @override String get fullscreen => 'Fullskjerm'; @override String get exitFullscreen => 'Avslutt fullskjerm'; @override String get pressBackAgainToExit => 'Trykk på Tilbake en gang til for å avslutte'; + @override late final _Translations$common$ratingSource$nb ratingSource = _Translations$common$ratingSource$nb._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$nb extends Translations$settings$en { @override String get darkTheme => 'Mørkt'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Innholdstetthet i biblioteket'; + @override String get displayScale => 'Skalering'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Komfortabel'; @override String get tvCornerSpotlightBackdrop => 'Fremhevet bakgrunn i hjørnet'; @@ -287,6 +291,11 @@ class _Translations$settings$nb extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => 'Automatisk (anbefalt)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} MB minne tilgjengelig. En buffer på ${size} MB kan påvirke avspillingen.'; + @override String get playbackBuffer => 'Avspillingsbuffer'; + @override String get playbackBufferAuto => 'Auto (anbefalt)'; + @override String get playbackBufferLarge => 'Stor'; + @override String get playbackBufferExtraLarge => 'Ekstra stor'; + @override String get playbackBufferDescription => 'Bufrer mer mot ustabile tilkoblinger. Begrenses også av bufferstørrelsen.'; @override String get defaultQualityTitle => 'Standardkvalitet'; @override String get musicQualityTitle => 'Musikkvalitet'; @override String get subtitleStyling => 'Undertekststil'; @@ -320,6 +329,9 @@ class _Translations$settings$nb extends Translations$settings$en { @override String get debugLoggingDescription => 'Aktiver detaljert logging for feilsøking'; @override String get viewLogs => 'Vis logger'; @override String get viewLogsDescription => 'Vis applikasjonslogger'; + @override String get clearImageCache => 'Tøm bildebufferen'; + @override String get clearImageCacheDescription => 'Tømmer bufret kunstverk og miniatyrbilder. Bilder kan lastes langsommere til de er lastet ned på nytt.'; + @override String get clearImageCacheSuccess => 'Bildebufferen ble tømt'; @override String get resetSettings => 'Tilbakestill innstillinger'; @override String get resetSettingsDescription => 'Gjenopprett standardinnstillinger. Dette kan ikke angres.'; @override String get resetSettingsSuccess => 'Innstillinger tilbakestilt'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$nb extends Translations$fileInfo$en { // Translations @override String get title => 'Filinformasjon'; + @override String get overview => 'Oversikt'; @override String get video => 'Video'; @override String get audio => 'Lyd'; @override String get subtitles => 'Undertekster'; + @override String get images => 'Innebygde bilder'; + @override String get dataStreams => 'Datastrømmer'; + @override String get lyrics => 'Sangtekster'; @override String get file => 'Fil'; + @override String get attachments => 'Vedlegg'; + @override String get delivery => 'Levering'; + @override String versionCounter({required Object index, required Object count}) => 'Versjon ${index} av ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Fil ${index} av ${count}'; + @override String get noStreams => 'Serveren rapporterte ingen strømmer for denne filen.'; + @override String get copyPath => 'Kopier bane'; + @override String get pathCopied => 'Filbane kopiert'; @override String get codec => 'Kodek'; + @override String get codecTag => 'Codec-tagg'; @override String get resolution => 'Oppløsning'; + @override String get codedResolution => 'Kodet oppløsning'; @override String get bitrate => 'Bitrate'; @override String get frameRate => 'Bildefrekvens'; + @override String get rotation => 'Rotasjon'; + @override String get comment => 'Kommentar'; + @override String get audioDescription => 'Lydbeskrivelse'; + @override String get headerCompression => 'Overskriftkomprimering'; + @override String get sidecarFile => 'Sidecar-fil'; + @override String get transportTimestamp => 'Transporttidsstempel'; + @override String get displayOffset => 'Visningsforskyvning'; + @override String get previewFailureCode => 'Forhåndsvisningsfeilkode'; + @override String get previewRetries => 'Nye forhåndsvisningsforsøk'; @override String get aspectRatio => 'Sideforhold'; + @override String get pixelAspectRatio => 'Piksel-aspektforhold'; @override String get profile => 'Profil'; + @override String get level => 'Nivå'; @override String get bitDepth => 'Bitdybde'; + @override String get pixelFormat => 'Pikselformat'; @override String get colorSpace => 'Fargerom'; @override String get colorRange => 'Fargeområde'; @override String get colorPrimaries => 'Fargeprimærer'; + @override String get colorTransfer => 'Fargeoverføring'; @override String get chromaSubsampling => 'Krominansnedsampling'; + @override String get chromaLocation => 'Kroma-plassering'; + @override String get scanType => 'Skanningstype'; + @override String get interlaced => 'Interlaced'; + @override String get anamorphic => 'Anamorfisk'; + @override String get referenceFrames => 'Referanserammer'; + @override String get dynamicRange => 'Dynamisk omfang'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision-nivå'; + @override String get dolbyVisionVersion => 'Dolby Vision-versjon'; + @override String get dolbyVisionLayers => 'Dolby Vision-lag'; + @override String get baseLayerCompatibility => 'Kompatibilitet for basislag'; + @override String get avcBitstream => 'AVC-bitstrøm'; + @override String get nalLengthSize => 'NAL-lengdestørrelse'; + @override String get scalingMatrix => 'Egendefinert skaleringsmatrise'; + @override String get streamIdentifier => 'Strømidentifikator'; + @override String get streamIndex => 'Strømindeks'; + @override String get streamId => 'Strøm-ID'; + @override String get language => 'Språk'; + @override String get languageCode => 'Språkkode'; + @override String get streamTitle => 'Spor-tittel'; @override String get channels => 'Kanaler'; + @override String get sampleRate => 'Samplingsfrekvens'; + @override String get spatialAudio => 'Romlig lyd'; + @override String get textBased => 'Tekstbasert'; + @override String get subtitleFormat => 'Sidecar-format'; + @override String get provider => 'Tilbyder'; + @override String get matchScore => 'Match-poengsum'; + @override String get externalDelivery => 'Kan leveres separat'; + @override String get sidecarPath => 'Sidecar-bane'; + @override String get sourceStream => 'Kopiert fra'; + @override String get temporary => 'Midlertidig'; + @override String get timeBase => 'Tidsbase'; @override String get overallBitrate => 'Total bitrate'; @override String get path => 'Sti'; + @override String get fileName => 'Filnavn'; @override String get size => 'Størrelse'; + @override String get totalSize => 'Total størrelse'; @override String get container => 'Format'; @override String get duration => 'Varighet'; + @override String get previewThumbnails => 'Forhåndsvisningsminiatyrer'; + @override String get previewIndex => 'Forhåndsvisningsindeks'; + @override String get packetLength => 'Pakkelengde'; + @override String get filePresent => 'Fil til stede'; + @override String get fileReadable => 'Lesbar for serveren'; + @override String get streamPath => 'Strømbane'; @override String get optimizedForStreaming => 'Optimalisert for strømming'; @override String get has64bitOffsets => '64-biters forskyvninger'; + @override String get protocol => 'Protokoll'; + @override String get mediaType => 'Mediatype'; + @override String get sourceKind => 'Kildetype'; + @override String get optimizedVersion => 'Optimalisert versjon'; + @override String get optimizationTarget => 'Optimaliseringsmål'; + @override String get deletedAt => 'Slettet'; + @override String get remoteSource => 'Ekstern kilde'; + @override String get infiniteStream => 'Uendelig strøm'; + @override String get directPlay => 'Direct Play'; + @override String get directStream => 'Direct Stream'; + @override String get transcoding => 'Transkoding'; + @override String get etag => 'ETag'; + @override String get versionId => 'Versjons-ID'; + @override String get fileId => 'Fil-ID'; + @override String get defaultAudioTrack => 'Standard lydspor'; + @override String get defaultSubtitleTrack => 'Standard tekstspor'; + @override String get subtitlesOff => 'Av'; + @override String get flagDefault => 'Standard'; + @override String get flagForced => 'Tvunget'; + @override String get flagSelected => 'Valgt'; + @override String get flagExternal => 'Ekstern'; + @override String get flagHearingImpaired => 'Hørselshemmet'; + @override String get flagDub => 'Dub'; + @override String get flagOriginal => 'Original'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$nb extends Translations$mediaMenu$en { @override String get shufflePlay => 'Tilfeldig avspilling'; @override String get shuffleNotAvailableOffline => 'Tilfeldig avspilling er ikke tilgjengelig uten nett'; @override String get fileInfo => 'Filinformasjon'; + @override String get deleteEpisodeFromServer => 'Slett episode fra serveren'; + @override String get deleteSeasonFromServer => 'Slett sesong fra serveren'; + @override String get deleteShowFromServer => 'Slett serie fra serveren'; + @override String get deleteMovieFromServer => 'Slett film fra serveren'; + @override String get deleteEpisodeTitle => 'Slette denne episoden?'; + @override String get deleteSeasonTitle => 'Slette denne sesongen?'; + @override String get deleteShowTitle => 'Slette denne serien?'; + @override String get deleteMovieTitle => 'Slette denne filmen?'; + @override String get deleteEpisodeConfirm => 'Slett episode'; + @override String get deleteSeasonConfirm => 'Slett sesong'; + @override String get deleteShowConfirm => 'Slett serie'; + @override String get deleteMovieConfirm => 'Slett film'; + @override String get deleteAnyway => 'Slett likevel'; + @override String confirmDeleteTarget({required Object title}) => 'Slette ${title} permanent fra serveren din?'; @override String get deleteMultipleWarning => 'Dette inkluderer alle episoder og deres filer.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, + one: 'Dette sletter ${n} episode i den, og filen.', + other: 'Dette sletter alle ${n} episodene i den, og filene deres.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, + one: 'Dette elementet er lagret som ${n} fil, som vil bli slettet.', + other: 'Dette elementet er lagret på tvers av ${n} filer, og alle vil bli slettet.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, + one: '${n} annen episode er lagret i samme fil og vil også bli slettet:', + other: '${n} andre episoder er lagret i samme fil og vil også bli slettet:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy kunne ikke sjekke hvilke filer dette vil fjerne, så det kan slette mer enn elementet som er nevnt ovenfor. Avbryt og prøv igjen, eller slett likevel.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Serveren din ga ikke fildetaljer for dette elementet, så Plezy kan ikke sjekke hvilke filer dette vil fjerne. Det kan slette mer enn elementet som er nevnt ovenfor.'; @override String get mediaDeletedSuccessfully => 'Medieelement slettet'; @override String get mediaFailedToDelete => 'Kunne ikke slette medieelement'; @override String get rate => 'Vurder'; @@ -657,6 +786,9 @@ class _Translations$videoControls$nb extends Translations$videoControls$en { @override String get playNext => 'Spill neste'; @override String get playButton => 'Spill av'; @override String get pauseButton => 'Pause'; + @override String get playbackPaused => 'Pauset'; + @override String get playbackResumed => 'Spiller'; + @override String get loadingVideo => 'Laster video'; @override String get showPlaybackControls => 'Vis avspillingskontroller'; @override String get hidePlaybackControls => 'Skjul avspillingskontroller'; @override String seekBackwardButton({required Object seconds}) => 'Spol tilbake ${seconds} sekunder'; @@ -726,6 +858,7 @@ class _Translations$messages$nb extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Fjernet fra Fortsett å se'; @override String errorLoading({required Object error}) => 'Feil: ${error}'; + @override String get searchPartialResults => 'Noen medieservere kunne ikke søkes i. Viser tilgjengelige resultater.'; @override String get streamInterrupted => 'Avspillingen ble avbrutt. Trykk på Spill av eller spol for å prøve på nytt.'; @override String get liveStreamInterrupted => 'Direktesendingen ble avbrutt. Trykk på Spill av for å prøve på nytt.'; @override String get fileInfoNotAvailable => 'Filinformasjon ikke tilgjengelig'; @@ -764,6 +897,8 @@ class _Translations$messages$nb extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Bytter til kompatibel spiller...'; @override String get serverLimitTitle => 'Avspilling mislyktes'; @override String get serverLimitBody => 'Serverfeil (HTTP 500). En båndbredde-/transkodingsgrense avviste trolig økten. Be eieren justere den.'; + @override String get mediaUnreadableTitle => 'Fil utilgjengelig'; + @override String get mediaUnreadableBody => 'Serveren fant dette elementet, men kunne ikke lese filen (HTTP 404). Filen er sannsynligvis flyttet, slettet, eller lagringen er frakoblet. Be serverens eier om å sjekke filen og skanne biblioteket på nytt.'; @override String get logsUploaded => 'Logger lastet opp'; @override String get logsUploadFailed => 'Kunne ikke laste opp logger'; @override String get logId => 'Logg-ID'; @@ -917,6 +1052,8 @@ class _Translations$connections$nb extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Økten er utløpt for ${name}'; @override String sessionExpiredMany({required Object count}) => 'Økten er utløpt for ${count} servere'; @override String get signInAgain => 'Logg inn igjen'; + @override String editMediaBrowserTitle({required Object product}) => 'Rediger ${product}-tilkobling'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Legg til eller fjern URL-er for ${serverName}. Plezy vil bruke den nåbare URL-en med lavest ventetid.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$nb extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Søk mislyktes: ${error}'; + @override String get searchUnavailable => 'Søket kunne ikke nå noen medieserver.'; @override String connectionTimeout({required Object context}) => 'Tidsavbrudd ved lasting av ${context}'; @override String get connectionFailed => 'Kan ikke koble til medieserver'; @override String unableToLoad({required Object context}) => 'Kunne ikke laste ${context}. Prøv igjen.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$nb extends Translations$logs$en { @override String get uploadLogs => 'Last opp logger'; } +// Path: startup +class _Translations$startup$nb extends Translations$startup$en { + _Translations$startup$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy kunne ikke starte'; + @override String get failedBody => 'Noe gikk galt under oppstart. Detaljene nedenfor viser hva som feilet.'; + @override String get failedBodyRepairable => 'Plezy\'s lagrede innstillingsfil er skadet og må bygges på nytt før Plezy kan starte. Å prøve igjen hjelper ikke – velg Reparer lagring.'; + @override String get phaseLabel => 'Trinn'; + @override String get showDetails => 'Vis detaljer'; + @override String get hideDetails => 'Skjul detaljer'; + @override String get copyDetails => 'Kopier detaljer'; + @override String get detailsCopied => 'Detaljer kopiert til utklippstavlen'; + @override String get uploadDetails => 'Last opp detaljer'; + @override String get repairStorage => 'Reparer lagring'; + @override String get repairTitle => 'Reparere lagrede data?'; + @override String get repairBodyCommon => 'Plezy\'s innstillingsfil er skadet og kan ikke leses. Reparasjon tilbakestiller alle innstillinger til standard.'; + @override String get repairBodyOneCredential => 'Én lagret pålogging er skadet og kan ikke leses. Reparasjon fjerner bare den; de andre innstillingene dine blir urørt.'; + @override String get repairBodySignInsKept => 'Serverne og profilene dine skal forbli pålogget.'; + @override String get repairBodySignInsLost => 'Nøkkelen som beskytter de lagrede påloggingene dine kan ikke gjenvinnes fra denne filen, så du må logge på alle servere og profiler på nytt. Ingenting på medieserveren din påvirkes.'; + @override String get repairBodySessionsUncertain => 'Trackere (MAL, AniList, Simkl, Trakt) og Seerr lagres separat og kan overleve eller ikke. Plezy vil fortelle deg nøyaktig hva det beholdt.'; + @override String get repairConfirm => 'Reparer'; + @override String get repairSucceeded => 'Lagring reparert'; + @override String get repairNeedsRestart => 'Lagring reparert – omstart kreves'; + @override String get restartRequiredBody => 'Dataene dine ble reparert, men Plezy må starte på nytt før det kan bruke dem. Lukk Plezy og åpne det igjen.'; + @override String get quitPlezy => 'Avslutt Plezy'; + @override String get repairFailed => 'Reparasjon mislyktes'; + @override String get repairKeptSignIns => 'Serverne og profilene dine er fortsatt pålogget.'; + @override String get repairLostSignIns => 'Nøkkelen som beskytter de lagrede påloggingene dine kunne ikke gjenvinnes. Du må logge på alle servere og profiler på nytt.'; + @override String get repairLostSessions => 'Minst én tracker- eller Seerr-tilkobling gikk tapt og må kobles til på nytt.'; + @override String get backupTitle => 'En kopi av den skadede filen ble beholdt'; + @override String get backupWarning => 'Den inneholder påloggingsinformasjonen din. Ikke last den opp eller del den.'; + @override String get deleteBackup => 'Slett kopi'; + @override String get backupDeleted => 'Kopi slettet.'; + @override String get previousFailureTitle => 'Plezy mislyktes i å starte forrige gang'; +} + // Path: licenses class _Translations$licenses$nb extends Translations$licenses$en { _Translations$licenses$nb._(TranslationsNb root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$nb extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Ingen treff for "${query}"'; @override String searchPrompt({required Object source}) => 'Søk etter filmer og serier på ${source}.'; @override String get searchFailed => 'Søk mislyktes. Sjekk tilkoblingen og prøv igjen.'; + @override late final _Translations$explore$badge$nb badge = _Translations$explore$badge$nb._(_root); + @override late final _Translations$explore$stats$nb stats = _Translations$explore$stats$nb._(_root); + @override late final _Translations$explore$season$nb season = _Translations$explore$season$nb._(_root); + @override late final _Translations$explore$format$nb format = _Translations$explore$format$nb._(_root); + @override late final _Translations$explore$sourceMaterial$nb sourceMaterial = _Translations$explore$sourceMaterial$nb._(_root); + @override late final _Translations$explore$creditRole$nb creditRole = _Translations$explore$creditRole$nb._(_root); + @override late final _Translations$explore$relation$nb relation = _Translations$explore$relation$nb._(_root); + @override String broadcast({required Object day, required Object time}) => 'Sendes ${day} kl. ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Sendes ${day} kl. ${time} ${timezone}'; + @override late final _Translations$explore$detail$nb detail = _Translations$explore$detail$nb._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, + one: '${n} resultat', + other: '${n} resultater', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$nb extends Translations$downloads$en { @override String get editSyncRule => 'Rediger synkroniseringsregel'; @override String get removeSyncRule => 'Fjern synkroniseringsregel'; @override String removeSyncRuleConfirm({required Object title}) => 'Slutte å synkronisere "${title}"? Nedlastede episoder beholdes.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Slutte å synkronisere «${title}»?'; + @override String get deleteSyncRuleDownloads => 'Slett også tilknyttede nedlastinger'; + @override String get deleteSyncRuleDownloadsDescription => 'Nedlastinger som brukes av en annen synkroniseringsregel eller profil, beholdes.'; @override String syncRuleCreated({required Object count}) => 'Synkroniseringsregel opprettet — beholder ${count} usette episoder'; @override String get syncRuleUpdated => 'Synkroniseringsregel oppdatert'; @override String get syncRuleRemoved => 'Synkroniseringsregel fjernet'; + @override String get syncRuleAndDownloadsRemoved => 'Synkroniseringsregel og tilknyttede nedlastinger fjernet'; + @override String get syncRuleCleanupBusy => 'Synkroniseringsreglene oppdateres for øyeblikket. Prøv igjen om et øyeblikk.'; + @override String get syncRuleCleanupUnavailable => 'Tilknyttede nedlastinger kunne ikke identifiseres på en trygg måte. Koble til serveren på nytt og prøv igjen, eller fjern regelen uten å slette nedlastingene.'; @override String syncedNewEpisodes({required Object count, required Object title}) => 'Synkroniserte ${count} nye episoder for ${title}'; @override String get activeSyncRules => 'Synkroniseringsregler'; @override String get noSyncRules => 'Ingen synkroniseringsregler'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$nb extends Translations$addServer$en { final TranslationsNb _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Legg til ${product}-server'; @override String get serverUrls => 'Server-URL-er'; @override String get serverUrlsHelper => 'Flere URL-er er tillatt, atskilt med komma.'; @override String get findServer => 'Finn server'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Leter etter lokale ${product}-servere...'; + @override String localMediaBrowserServers({required Object product}) => 'Lokale ${product}-servere'; @override String get username => 'Brukernavn'; @override String get password => 'Passord'; @override String get signIn => 'Logg inn'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$nb extends Translations$addServer$en { @override String get addPlexTitle => 'Logg inn med Plex'; @override String get pinExpired => 'PIN-koden utløp før innloggingen var fullført. Prøv igjen.'; @override String failedToRegisterAccount({required Object error}) => 'Kunne ikke registrere kontoen: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Skriv inn URL-en til ${product}-serveren din'; @override String get addConnectionTitle => 'Legg til tilkobling'; @override String addConnectionTitleScoped({required Object name}) => 'Legg til for ${name}'; @override String get signInWithPlexCard => 'Logg inn med Plex'; @override String get signInWithPlexCardSubtitle => 'Autoriser denne enheten. Delte servere legges til.'; @override String get signInWithPlexCardSubtitleScoped => 'Autoriser en Plex-konto. Home-brukere blir profiler.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Koble til ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Skriv inn server-URL-en, brukernavnet og passordet ditt.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Logg på ${product}-serveren din. Knyttes til ${name}.'; @override String get borrowFromAnotherProfile => 'Lån fra en annen profil'; @override String get borrowFromAnotherProfileSubtitle => 'Gjenbruk en annen profils tilkobling. PIN-beskyttede profiler krever PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$nb extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get critic => 'Kritikere'; + @override String get audience => 'Publikum'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes-kritikere'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes-publikum'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$nb extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$nb._(TranslationsNb root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$nb extends Translations$explore$status$en { @override String get upcoming => 'Kommende'; } +// Path: explore.badge +class _Translations$explore$badge$nb extends Translations$explore$badge$en { + _Translations$explore$badge$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} populær'; + @override String rankAiring({required Object n}) => '#${n} på lufta'; + @override String rankRated({required Object n}) => '#${n} vurdert'; + @override String rankFavorited({required Object n}) => '#${n} favorisert'; + @override String rankTrending({required Object n}) => '#${n} trendende'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} i ${season}'; + @override String watchingNow({required Object n}) => '${n} ser på'; + @override String get available => 'Tilgjengelig'; + @override String get partiallyAvailable => 'Delvis tilgjengelig'; + @override String get availableIn4k => '4K tilgjengelig'; + @override String get requested => 'Forespurt'; + @override String get pendingApproval => 'Venter på godkjenning'; + @override String get processing => 'Behandler'; + @override String get declined => 'Avslått'; + @override String get requestFailed => 'Forespørsel mislyktes'; + @override String get requested4k => '4K forespurt'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} sesonger'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Ep ${episode} om ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Neste om ${duration}'; + @override String episodesShort({required Object n}) => '${n} ep.'; + @override String minutesPerEpisode({required Object n}) => '${n} min/ep'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$nb extends Translations$explore$stats$en { + _Translations$explore$stats$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} oppført'; + @override String viewersDay({required Object n}) => '${n} så på i dag'; + @override String viewersWeek({required Object n}) => '${n} så på denne uken'; + @override String viewersMonth({required Object n}) => '${n} så på denne måneden'; + @override String viewersYear({required Object n}) => '${n} så på i år'; + @override String viewersAllTime({required Object n}) => '${n} seere'; + @override String planning({required Object n}) => '${n} planlegger å se'; + @override String favorited({required Object n}) => '${n} favoritter'; + @override String dropRate({required Object percent}) => '${percent} droppet den'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, + one: '${n} kommentar', + other: '${n} kommentarer', + ); + @override String votes({required Object n}) => '${n} stemmer'; + @override String watching({required Object n}) => '${n} ser på den'; + @override String completed({required Object n}) => '${n} fullførte'; + @override String onHold({required Object n}) => '${n} på pause'; + @override String dropped({required Object n}) => '${n} droppet'; +} + +// Path: explore.season +class _Translations$explore$season$nb extends Translations$explore$season$en { + _Translations$explore$season$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get winter => 'Vinter'; + @override String get spring => 'Vår'; + @override String get summer => 'Sommer'; + @override String get fall => 'Høst'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$nb extends Translations$explore$format$en { + _Translations$explore$format$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV-kort'; + @override String get movie => 'Film'; + @override String get special => 'Spesial'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musikk'; + @override String get other => 'Annet'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$nb extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get original => 'Original'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Spill'; + @override String get webComic => 'Nettserie'; + @override String get musicRelease => 'Musikk'; + @override String get otherMedia => 'Annet'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$nb extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get director => 'Regissør'; + @override String get writer => 'Forfatter'; + @override String get producer => 'Produsent'; + @override String get creator => 'Skaper'; + @override String get composer => 'Komponist'; +} + +// Path: explore.relation +class _Translations$explore$relation$nb extends Translations$explore$relation$en { + _Translations$explore$relation$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Sequel'; + @override String get sideStory => 'Bihistorie'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternativ versjon'; + @override String get summary => 'Sammendrag'; + @override String get parentStory => 'Hovedhistorie'; + @override String get adaptation => 'Adaptasjon'; + @override String get other => 'Relatert'; +} + +// Path: explore.detail +class _Translations$explore$detail$nb extends Translations$explore$detail$en { + _Translations$explore$detail$nb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Originaltittel'; + @override String get alsoKnownAs => 'Også kjent som'; + @override String get studios => 'Studioer'; + @override String get country => 'Land'; + @override String get language => 'Språk'; + @override String get released => 'Utgitt'; + @override String get physicalRelease => 'På disk'; + @override String get ended => 'Avsluttet'; + @override String addedOn({required Object date}) => 'Lagt til ${date}'; + @override String get yourRating => 'Din vurdering'; + @override String get budget => 'Budsjett'; + @override String get revenue => 'Billettinntekter'; + @override String get contentAdvisory => 'Aldersveiledning'; + @override String get tags => 'Tagger'; + @override String get revealSpoilerTags => 'Vis spoilertagger'; + @override String get links => 'Lenker'; + @override String get watchOn => 'Se på'; + @override String get watchTrailer => 'Se trailer'; + @override String openOn({required Object site}) => 'Åpne på ${site}'; + @override String get crew => 'Mannskap'; + @override String get ratings => 'Vurderinger'; + @override String get schedule => 'Sendeskjema'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, + one: 'Anbefalt av ${n} bruker', + other: 'Anbefalt av ${n} brukere', + ); + @override String recommendedBy({required Object who}) => 'Anbefalt av ${who}'; + @override String favoritedBy({required Object who}) => 'Favorisert av ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} har ikke blitt sendt ennå'; + @override String recommendedByPercent({required Object percent}) => 'Anbefalt av ${percent} av seerne'; + @override String get relatedTitles => 'Relaterte titler'; + @override String get background => 'Bakgrunn'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$nb extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$nb._(TranslationsNb root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$nb extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsNb { 'auth.waitingForAuth' => 'Venter på autentisering...\nLogg inn fra nettleseren.', 'auth.useBrowser' => 'Bruk nettleser', 'auth.or' => 'eller', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Koble til ${product}', 'auth.useQuickConnect' => 'Bruk Quick Connect', 'auth.quickConnectInstructions' => 'Åpne Quick Connect i Jellyfin og skriv inn denne koden.', 'auth.quickConnectWaiting' => 'Venter på godkjenning…', @@ -2248,6 +2654,17 @@ extension on TranslationsNb { 'common.fullscreen' => 'Fullskjerm', 'common.exitFullscreen' => 'Avslutt fullskjerm', 'common.pressBackAgainToExit' => 'Trykk på Tilbake en gang til for å avslutte', + 'common.ratingSource.critic' => 'Kritikere', + 'common.ratingSource.audience' => 'Publikum', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes-kritikere', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes-publikum', 'screens.licenses' => 'Lisenser', 'screens.switchProfile' => 'Bytt profil', 'screens.subtitleStyling' => 'Undertekststil', @@ -2284,6 +2701,7 @@ extension on TranslationsNb { 'settings.darkTheme' => 'Mørkt', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Innholdstetthet i biblioteket', + 'settings.displayScale' => 'Skalering', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Komfortabel', 'settings.tvCornerSpotlightBackdrop' => 'Fremhevet bakgrunn i hjørnet', @@ -2333,6 +2751,11 @@ extension on TranslationsNb { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => 'Automatisk (anbefalt)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} MB minne tilgjengelig. En buffer på ${size} MB kan påvirke avspillingen.', + 'settings.playbackBuffer' => 'Avspillingsbuffer', + 'settings.playbackBufferAuto' => 'Auto (anbefalt)', + 'settings.playbackBufferLarge' => 'Stor', + 'settings.playbackBufferExtraLarge' => 'Ekstra stor', + 'settings.playbackBufferDescription' => 'Bufrer mer mot ustabile tilkoblinger. Begrenses også av bufferstørrelsen.', 'settings.defaultQualityTitle' => 'Standardkvalitet', 'settings.musicQualityTitle' => 'Musikkvalitet', 'settings.subtitleStyling' => 'Undertekststil', @@ -2366,6 +2789,9 @@ extension on TranslationsNb { 'settings.debugLoggingDescription' => 'Aktiver detaljert logging for feilsøking', 'settings.viewLogs' => 'Vis logger', 'settings.viewLogsDescription' => 'Vis applikasjonslogger', + 'settings.clearImageCache' => 'Tøm bildebufferen', + 'settings.clearImageCacheDescription' => 'Tømmer bufret kunstverk og miniatyrbilder. Bilder kan lastes langsommere til de er lastet ned på nytt.', + 'settings.clearImageCacheSuccess' => 'Bildebufferen ble tømt', 'settings.resetSettings' => 'Tilbakestill innstillinger', 'settings.resetSettingsDescription' => 'Gjenopprett standardinnstillinger. Dette kan ikke angres.', 'settings.resetSettingsSuccess' => 'Innstillinger tilbakestilt', @@ -2549,29 +2975,118 @@ extension on TranslationsNb { 'hotkeys.actions.skipMarker' => 'Hopp over intro/rulletekst', 'hotkeys.actions.screenshot' => 'Ta skjermbilde', 'fileInfo.title' => 'Filinformasjon', + 'fileInfo.overview' => 'Oversikt', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Lyd', 'fileInfo.subtitles' => 'Undertekster', + 'fileInfo.images' => 'Innebygde bilder', + 'fileInfo.dataStreams' => 'Datastrømmer', + 'fileInfo.lyrics' => 'Sangtekster', 'fileInfo.file' => 'Fil', + 'fileInfo.attachments' => 'Vedlegg', + 'fileInfo.delivery' => 'Levering', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Versjon ${index} av ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Fil ${index} av ${count}', + 'fileInfo.noStreams' => 'Serveren rapporterte ingen strømmer for denne filen.', + 'fileInfo.copyPath' => 'Kopier bane', + 'fileInfo.pathCopied' => 'Filbane kopiert', 'fileInfo.codec' => 'Kodek', + 'fileInfo.codecTag' => 'Codec-tagg', 'fileInfo.resolution' => 'Oppløsning', + 'fileInfo.codedResolution' => 'Kodet oppløsning', 'fileInfo.bitrate' => 'Bitrate', 'fileInfo.frameRate' => 'Bildefrekvens', + 'fileInfo.rotation' => 'Rotasjon', + 'fileInfo.comment' => 'Kommentar', + 'fileInfo.audioDescription' => 'Lydbeskrivelse', + 'fileInfo.headerCompression' => 'Overskriftkomprimering', + 'fileInfo.sidecarFile' => 'Sidecar-fil', + 'fileInfo.transportTimestamp' => 'Transporttidsstempel', + 'fileInfo.displayOffset' => 'Visningsforskyvning', + 'fileInfo.previewFailureCode' => 'Forhåndsvisningsfeilkode', + 'fileInfo.previewRetries' => 'Nye forhåndsvisningsforsøk', 'fileInfo.aspectRatio' => 'Sideforhold', + 'fileInfo.pixelAspectRatio' => 'Piksel-aspektforhold', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Nivå', 'fileInfo.bitDepth' => 'Bitdybde', + 'fileInfo.pixelFormat' => 'Pikselformat', 'fileInfo.colorSpace' => 'Fargerom', 'fileInfo.colorRange' => 'Fargeområde', 'fileInfo.colorPrimaries' => 'Fargeprimærer', + 'fileInfo.colorTransfer' => 'Fargeoverføring', 'fileInfo.chromaSubsampling' => 'Krominansnedsampling', + 'fileInfo.chromaLocation' => 'Kroma-plassering', + 'fileInfo.scanType' => 'Skanningstype', + 'fileInfo.interlaced' => 'Interlaced', + 'fileInfo.anamorphic' => 'Anamorfisk', + 'fileInfo.referenceFrames' => 'Referanserammer', + 'fileInfo.dynamicRange' => 'Dynamisk omfang', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision-nivå', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision-versjon', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision-lag', + 'fileInfo.baseLayerCompatibility' => 'Kompatibilitet for basislag', + 'fileInfo.avcBitstream' => 'AVC-bitstrøm', + 'fileInfo.nalLengthSize' => 'NAL-lengdestørrelse', + 'fileInfo.scalingMatrix' => 'Egendefinert skaleringsmatrise', + 'fileInfo.streamIdentifier' => 'Strømidentifikator', + 'fileInfo.streamIndex' => 'Strømindeks', + 'fileInfo.streamId' => 'Strøm-ID', + 'fileInfo.language' => 'Språk', + 'fileInfo.languageCode' => 'Språkkode', + 'fileInfo.streamTitle' => 'Spor-tittel', 'fileInfo.channels' => 'Kanaler', + 'fileInfo.sampleRate' => 'Samplingsfrekvens', + 'fileInfo.spatialAudio' => 'Romlig lyd', + 'fileInfo.textBased' => 'Tekstbasert', + 'fileInfo.subtitleFormat' => 'Sidecar-format', + 'fileInfo.provider' => 'Tilbyder', + 'fileInfo.matchScore' => 'Match-poengsum', + 'fileInfo.externalDelivery' => 'Kan leveres separat', + 'fileInfo.sidecarPath' => 'Sidecar-bane', + 'fileInfo.sourceStream' => 'Kopiert fra', + 'fileInfo.temporary' => 'Midlertidig', + 'fileInfo.timeBase' => 'Tidsbase', 'fileInfo.overallBitrate' => 'Total bitrate', 'fileInfo.path' => 'Sti', + 'fileInfo.fileName' => 'Filnavn', 'fileInfo.size' => 'Størrelse', + 'fileInfo.totalSize' => 'Total størrelse', 'fileInfo.container' => 'Format', 'fileInfo.duration' => 'Varighet', + 'fileInfo.previewThumbnails' => 'Forhåndsvisningsminiatyrer', + 'fileInfo.previewIndex' => 'Forhåndsvisningsindeks', + 'fileInfo.packetLength' => 'Pakkelengde', + 'fileInfo.filePresent' => 'Fil til stede', + 'fileInfo.fileReadable' => 'Lesbar for serveren', + 'fileInfo.streamPath' => 'Strømbane', 'fileInfo.optimizedForStreaming' => 'Optimalisert for strømming', 'fileInfo.has64bitOffsets' => '64-biters forskyvninger', + 'fileInfo.protocol' => 'Protokoll', + 'fileInfo.mediaType' => 'Mediatype', + 'fileInfo.sourceKind' => 'Kildetype', + 'fileInfo.optimizedVersion' => 'Optimalisert versjon', + 'fileInfo.optimizationTarget' => 'Optimaliseringsmål', + 'fileInfo.deletedAt' => 'Slettet', + 'fileInfo.remoteSource' => 'Ekstern kilde', + 'fileInfo.infiniteStream' => 'Uendelig strøm', + 'fileInfo.directPlay' => 'Direct Play', + 'fileInfo.directStream' => 'Direct Stream', + 'fileInfo.transcoding' => 'Transkoding', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Versjons-ID', + 'fileInfo.fileId' => 'Fil-ID', + 'fileInfo.defaultAudioTrack' => 'Standard lydspor', + 'fileInfo.defaultSubtitleTrack' => 'Standard tekstspor', + 'fileInfo.subtitlesOff' => 'Av', + 'fileInfo.flagDefault' => 'Standard', + 'fileInfo.flagForced' => 'Tvunget', + 'fileInfo.flagSelected' => 'Valgt', + 'fileInfo.flagExternal' => 'Ekstern', + 'fileInfo.flagHearingImpaired' => 'Hørselshemmet', + 'fileInfo.flagDub' => 'Dub', + 'fileInfo.flagOriginal' => 'Original', 'mediaMenu.markAsWatched' => 'Merk som sett', 'mediaMenu.markAsUnwatched' => 'Merk som usett', 'mediaMenu.removeFromContinueWatching' => 'Fjern fra Fortsett å se', @@ -2580,7 +3095,28 @@ extension on TranslationsNb { 'mediaMenu.shufflePlay' => 'Tilfeldig avspilling', 'mediaMenu.shuffleNotAvailableOffline' => 'Tilfeldig avspilling er ikke tilgjengelig uten nett', 'mediaMenu.fileInfo' => 'Filinformasjon', + 'mediaMenu.deleteEpisodeFromServer' => 'Slett episode fra serveren', + 'mediaMenu.deleteSeasonFromServer' => 'Slett sesong fra serveren', + 'mediaMenu.deleteShowFromServer' => 'Slett serie fra serveren', + 'mediaMenu.deleteMovieFromServer' => 'Slett film fra serveren', + 'mediaMenu.deleteEpisodeTitle' => 'Slette denne episoden?', + 'mediaMenu.deleteSeasonTitle' => 'Slette denne sesongen?', + 'mediaMenu.deleteShowTitle' => 'Slette denne serien?', + 'mediaMenu.deleteMovieTitle' => 'Slette denne filmen?', + 'mediaMenu.deleteEpisodeConfirm' => 'Slett episode', + 'mediaMenu.deleteSeasonConfirm' => 'Slett sesong', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Slett serie', + 'mediaMenu.deleteMovieConfirm' => 'Slett film', + 'mediaMenu.deleteAnyway' => 'Slett likevel', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Slette ${title} permanent fra serveren din?', 'mediaMenu.deleteMultipleWarning' => 'Dette inkluderer alle episoder og deres filer.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: 'Dette sletter ${n} episode i den, og filen.', other: 'Dette sletter alle ${n} episodene i den, og filene deres.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: 'Dette elementet er lagret som ${n} fil, som vil bli slettet.', other: 'Dette elementet er lagret på tvers av ${n} filer, og alle vil bli slettet.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: '${n} annen episode er lagret i samme fil og vil også bli slettet:', other: '${n} andre episoder er lagret i samme fil og vil også bli slettet:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy kunne ikke sjekke hvilke filer dette vil fjerne, så det kan slette mer enn elementet som er nevnt ovenfor. Avbryt og prøv igjen, eller slett likevel.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Serveren din ga ikke fildetaljer for dette elementet, så Plezy kan ikke sjekke hvilke filer dette vil fjerne. Det kan slette mer enn elementet som er nevnt ovenfor.', 'mediaMenu.mediaDeletedSuccessfully' => 'Medieelement slettet', 'mediaMenu.mediaFailedToDelete' => 'Kunne ikke slette medieelement', 'mediaMenu.rate' => 'Vurder', @@ -2646,6 +3182,9 @@ extension on TranslationsNb { 'videoControls.playNext' => 'Spill neste', 'videoControls.playButton' => 'Spill av', 'videoControls.pauseButton' => 'Pause', + 'videoControls.playbackPaused' => 'Pauset', + 'videoControls.playbackResumed' => 'Spiller', + 'videoControls.loadingVideo' => 'Laster video', 'videoControls.showPlaybackControls' => 'Vis avspillingskontroller', 'videoControls.hidePlaybackControls' => 'Skjul avspillingskontroller', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Spol tilbake ${seconds} sekunder', @@ -2700,8 +3239,6 @@ extension on TranslationsNb { 'videoControls.subtitleDownloaded' => 'Undertekst lastet ned', 'videoControls.subtitleDownloadedNotApplied' => 'Underteksten ble lastet ned, men kunne ikke velges', 'videoControls.subtitleDownloadFailed' => 'Kunne ikke laste ned undertekst', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Søk etter språk...', 'messages.markedAsWatched' => 'Merket som sett', 'messages.markedAsUnwatched' => 'Merket som usett', @@ -2711,6 +3248,7 @@ extension on TranslationsNb { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: 'Fjernet automatisk ${n} avspilt nedlasting', other: 'Fjernet automatisk ${n} avspilte nedlastinger', ), 'messages.removedFromContinueWatching' => 'Fjernet fra Fortsett å se', 'messages.errorLoading' => ({required Object error}) => 'Feil: ${error}', + 'messages.searchPartialResults' => 'Noen medieservere kunne ikke søkes i. Viser tilgjengelige resultater.', 'messages.streamInterrupted' => 'Avspillingen ble avbrutt. Trykk på Spill av eller spol for å prøve på nytt.', 'messages.liveStreamInterrupted' => 'Direktesendingen ble avbrutt. Trykk på Spill av for å prøve på nytt.', 'messages.fileInfoNotAvailable' => 'Filinformasjon ikke tilgjengelig', @@ -2749,6 +3287,8 @@ extension on TranslationsNb { 'messages.switchingToCompatiblePlayer' => 'Bytter til kompatibel spiller...', 'messages.serverLimitTitle' => 'Avspilling mislyktes', 'messages.serverLimitBody' => 'Serverfeil (HTTP 500). En båndbredde-/transkodingsgrense avviste trolig økten. Be eieren justere den.', + 'messages.mediaUnreadableTitle' => 'Fil utilgjengelig', + 'messages.mediaUnreadableBody' => 'Serveren fant dette elementet, men kunne ikke lese filen (HTTP 404). Filen er sannsynligvis flyttet, slettet, eller lagringen er frakoblet. Be serverens eier om å sjekke filen og skanne biblioteket på nytt.', 'messages.logsUploaded' => 'Logger lastet opp', 'messages.logsUploadFailed' => 'Kunne ikke laste opp logger', 'messages.logId' => 'Logg-ID', @@ -2857,6 +3397,8 @@ extension on TranslationsNb { 'connections.sessionExpiredOne' => ({required Object name}) => 'Økten er utløpt for ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Økten er utløpt for ${count} servere', 'connections.signInAgain' => 'Logg inn igjen', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Rediger ${product}-tilkobling', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Legg til eller fjern URL-er for ${serverName}. Plezy vil bruke den nåbare URL-en med lavest ventetid.', 'discover.title' => 'Oppdag', 'discover.noContentAvailable' => 'Ikke noe innhold tilgjengelig', 'discover.addMediaToLibraries' => 'Legg til medier i bibliotekene dine', @@ -2882,6 +3424,7 @@ extension on TranslationsNb { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min igjen', 'discover.moreLikeThis' => 'Mer som dette', 'errors.searchFailed' => ({required Object error}) => 'Søk mislyktes: ${error}', + 'errors.searchUnavailable' => 'Søket kunne ikke nå noen medieserver.', 'errors.connectionTimeout' => ({required Object context}) => 'Tidsavbrudd ved lasting av ${context}', 'errors.connectionFailed' => 'Kan ikke koble til medieserver', 'errors.unableToLoad' => ({required Object context}) => 'Kunne ikke laste ${context}. Prøv igjen.', @@ -2989,6 +3532,36 @@ extension on TranslationsNb { 'logs.clearLogs' => 'Tøm logger', 'logs.copyLogs' => 'Kopier logger', 'logs.uploadLogs' => 'Last opp logger', + 'startup.failedTitle' => 'Plezy kunne ikke starte', + 'startup.failedBody' => 'Noe gikk galt under oppstart. Detaljene nedenfor viser hva som feilet.', + 'startup.failedBodyRepairable' => 'Plezy\'s lagrede innstillingsfil er skadet og må bygges på nytt før Plezy kan starte. Å prøve igjen hjelper ikke – velg Reparer lagring.', + 'startup.phaseLabel' => 'Trinn', + 'startup.showDetails' => 'Vis detaljer', + 'startup.hideDetails' => 'Skjul detaljer', + 'startup.copyDetails' => 'Kopier detaljer', + 'startup.detailsCopied' => 'Detaljer kopiert til utklippstavlen', + 'startup.uploadDetails' => 'Last opp detaljer', + 'startup.repairStorage' => 'Reparer lagring', + 'startup.repairTitle' => 'Reparere lagrede data?', + 'startup.repairBodyCommon' => 'Plezy\'s innstillingsfil er skadet og kan ikke leses. Reparasjon tilbakestiller alle innstillinger til standard.', + 'startup.repairBodyOneCredential' => 'Én lagret pålogging er skadet og kan ikke leses. Reparasjon fjerner bare den; de andre innstillingene dine blir urørt.', + 'startup.repairBodySignInsKept' => 'Serverne og profilene dine skal forbli pålogget.', + 'startup.repairBodySignInsLost' => 'Nøkkelen som beskytter de lagrede påloggingene dine kan ikke gjenvinnes fra denne filen, så du må logge på alle servere og profiler på nytt. Ingenting på medieserveren din påvirkes.', + 'startup.repairBodySessionsUncertain' => 'Trackere (MAL, AniList, Simkl, Trakt) og Seerr lagres separat og kan overleve eller ikke. Plezy vil fortelle deg nøyaktig hva det beholdt.', + 'startup.repairConfirm' => 'Reparer', + 'startup.repairSucceeded' => 'Lagring reparert', + 'startup.repairNeedsRestart' => 'Lagring reparert – omstart kreves', + 'startup.restartRequiredBody' => 'Dataene dine ble reparert, men Plezy må starte på nytt før det kan bruke dem. Lukk Plezy og åpne det igjen.', + 'startup.quitPlezy' => 'Avslutt Plezy', + 'startup.repairFailed' => 'Reparasjon mislyktes', + 'startup.repairKeptSignIns' => 'Serverne og profilene dine er fortsatt pålogget.', + 'startup.repairLostSignIns' => 'Nøkkelen som beskytter de lagrede påloggingene dine kunne ikke gjenvinnes. Du må logge på alle servere og profiler på nytt.', + 'startup.repairLostSessions' => 'Minst én tracker- eller Seerr-tilkobling gikk tapt og må kobles til på nytt.', + 'startup.backupTitle' => 'En kopi av den skadede filen ble beholdt', + 'startup.backupWarning' => 'Den inneholder påloggingsinformasjonen din. Ikke last den opp eller del den.', + 'startup.deleteBackup' => 'Slett kopi', + 'startup.backupDeleted' => 'Kopi slettet.', + 'startup.previousFailureTitle' => 'Plezy mislyktes i å starte forrige gang', 'licenses.relatedPackages' => 'Relaterte pakker', 'licenses.license' => 'Lisens', 'licenses.licenseNumber' => ({required Object number}) => 'Lisens ${number}', @@ -3032,6 +3605,113 @@ extension on TranslationsNb { 'explore.searchEmpty' => ({required Object query}) => 'Ingen treff for "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Søk etter filmer og serier på ${source}.', 'explore.searchFailed' => 'Søk mislyktes. Sjekk tilkoblingen og prøv igjen.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} populær', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} på lufta', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} vurdert', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favorisert', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} trendende', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} i ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} ser på', + 'explore.badge.available' => 'Tilgjengelig', + 'explore.badge.partiallyAvailable' => 'Delvis tilgjengelig', + 'explore.badge.availableIn4k' => '4K tilgjengelig', + 'explore.badge.requested' => 'Forespurt', + 'explore.badge.pendingApproval' => 'Venter på godkjenning', + 'explore.badge.processing' => 'Behandler', + 'explore.badge.declined' => 'Avslått', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Forespørsel mislyktes', + 'explore.badge.requested4k' => '4K forespurt', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} sesonger', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Ep ${episode} om ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Neste om ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} ep.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/ep', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} oppført', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} så på i dag', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} så på denne uken', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} så på denne måneden', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} så på i år', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} seere', + 'explore.stats.planning' => ({required Object n}) => '${n} planlegger å se', + 'explore.stats.favorited' => ({required Object n}) => '${n} favoritter', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} droppet den', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: '${n} kommentar', other: '${n} kommentarer', ), + 'explore.stats.votes' => ({required Object n}) => '${n} stemmer', + 'explore.stats.watching' => ({required Object n}) => '${n} ser på den', + 'explore.stats.completed' => ({required Object n}) => '${n} fullførte', + 'explore.stats.onHold' => ({required Object n}) => '${n} på pause', + 'explore.stats.dropped' => ({required Object n}) => '${n} droppet', + 'explore.season.winter' => 'Vinter', + 'explore.season.spring' => 'Vår', + 'explore.season.summer' => 'Sommer', + 'explore.season.fall' => 'Høst', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV-kort', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Spesial', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musikk', + 'explore.format.other' => 'Annet', + 'explore.sourceMaterial.original' => 'Original', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Spill', + 'explore.sourceMaterial.webComic' => 'Nettserie', + 'explore.sourceMaterial.musicRelease' => 'Musikk', + 'explore.sourceMaterial.otherMedia' => 'Annet', + 'explore.creditRole.director' => 'Regissør', + 'explore.creditRole.writer' => 'Forfatter', + 'explore.creditRole.producer' => 'Produsent', + 'explore.creditRole.creator' => 'Skaper', + 'explore.creditRole.composer' => 'Komponist', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Sequel', + 'explore.relation.sideStory' => 'Bihistorie', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternativ versjon', + 'explore.relation.summary' => 'Sammendrag', + 'explore.relation.parentStory' => 'Hovedhistorie', + 'explore.relation.adaptation' => 'Adaptasjon', + 'explore.relation.other' => 'Relatert', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Sendes ${day} kl. ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Sendes ${day} kl. ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Originaltittel', + 'explore.detail.alsoKnownAs' => 'Også kjent som', + 'explore.detail.studios' => 'Studioer', + 'explore.detail.country' => 'Land', + 'explore.detail.language' => 'Språk', + 'explore.detail.released' => 'Utgitt', + 'explore.detail.physicalRelease' => 'På disk', + 'explore.detail.ended' => 'Avsluttet', + 'explore.detail.addedOn' => ({required Object date}) => 'Lagt til ${date}', + 'explore.detail.yourRating' => 'Din vurdering', + 'explore.detail.budget' => 'Budsjett', + 'explore.detail.revenue' => 'Billettinntekter', + 'explore.detail.contentAdvisory' => 'Aldersveiledning', + 'explore.detail.tags' => 'Tagger', + 'explore.detail.revealSpoilerTags' => 'Vis spoilertagger', + 'explore.detail.links' => 'Lenker', + 'explore.detail.watchOn' => 'Se på', + 'explore.detail.watchTrailer' => 'Se trailer', + 'explore.detail.openOn' => ({required Object site}) => 'Åpne på ${site}', + 'explore.detail.crew' => 'Mannskap', + 'explore.detail.ratings' => 'Vurderinger', + 'explore.detail.schedule' => 'Sendeskjema', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: 'Anbefalt av ${n} bruker', other: 'Anbefalt av ${n} brukere', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Anbefalt av ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Favorisert av ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} har ikke blitt sendt ennå', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Anbefalt av ${percent} av seerne', + 'explore.detail.relatedTitles' => 'Relaterte titler', + 'explore.detail.background' => 'Bakgrunn', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: '${n} resultat', other: '${n} resultater', ), 'liveTv.title' => 'Direkte-TV', 'liveTv.guide' => 'Programguide', 'liveTv.noChannels' => 'Ingen kanaler tilgjengelig', @@ -3214,8 +3894,6 @@ extension on TranslationsNb { 'watchTogether.relayUnreachable' => 'Reléserveren kan ikke nås. Blokkering hos internettleverandøren kan hindre Se sammen.', 'watchTogether.reconnectingToHost' => 'Kobler til verten på nytt...', 'watchTogether.currentPlayback' => 'Gjeldende avspilling', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Bli med i gjeldende avspilling', 'watchTogether.joinCurrentPlaybackDescription' => 'Hopp tilbake til det verten ser på nå', 'watchTogether.failedToOpenCurrentPlayback' => 'Kunne ikke åpne gjeldende avspilling', @@ -3284,9 +3962,15 @@ extension on TranslationsNb { 'downloads.editSyncRule' => 'Rediger synkroniseringsregel', 'downloads.removeSyncRule' => 'Fjern synkroniseringsregel', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Slutte å synkronisere "${title}"? Nedlastede episoder beholdes.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Slutte å synkronisere «${title}»?', + 'downloads.deleteSyncRuleDownloads' => 'Slett også tilknyttede nedlastinger', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Nedlastinger som brukes av en annen synkroniseringsregel eller profil, beholdes.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Synkroniseringsregel opprettet — beholder ${count} usette episoder', 'downloads.syncRuleUpdated' => 'Synkroniseringsregel oppdatert', 'downloads.syncRuleRemoved' => 'Synkroniseringsregel fjernet', + 'downloads.syncRuleAndDownloadsRemoved' => 'Synkroniseringsregel og tilknyttede nedlastinger fjernet', + 'downloads.syncRuleCleanupBusy' => 'Synkroniseringsreglene oppdateres for øyeblikket. Prøv igjen om et øyeblikk.', + 'downloads.syncRuleCleanupUnavailable' => 'Tilknyttede nedlastinger kunne ikke identifiseres på en trygg måte. Koble til serveren på nytt og prøv igjen, eller fjern regelen uten å slette nedlastingene.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => 'Synkroniserte ${count} nye episoder for ${title}', 'downloads.activeSyncRules' => 'Synkroniseringsregler', 'downloads.noSyncRules' => 'Ingen synkroniseringsregler', @@ -3449,6 +4133,8 @@ extension on TranslationsNb { 'performanceOverlay.dvRpus' => 'DV RPU-er', 'performanceOverlay.dvRpuAverage' => 'DV RPU snitt', 'performanceOverlay.dvSampleAverage' => 'DV-sample snitt', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Maks luma', 'performanceOverlay.minLuma' => 'Min luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsNb { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Aktiver Plezy på ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Besøk ${url} og skriv inn denne koden:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Åpne ${service} for å aktivere', @@ -3641,9 +4328,12 @@ extension on TranslationsNb { 'services.libraryFilter.modeHintWhitelist' => 'Synkroniser kun bibliotekene du markerer nedenfor.', 'services.libraryFilter.libraries' => 'Biblioteker', 'services.libraryFilter.noLibraries' => 'Ingen biblioteker tilgjengelige', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Legg til ${product}-server', 'addServer.serverUrls' => 'Server-URL-er', 'addServer.serverUrlsHelper' => 'Flere URL-er er tillatt, atskilt med komma.', 'addServer.findServer' => 'Finn server', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Leter etter lokale ${product}-servere...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Lokale ${product}-servere', 'addServer.username' => 'Brukernavn', 'addServer.password' => 'Passord', 'addServer.signIn' => 'Logg inn', @@ -3655,11 +4345,15 @@ extension on TranslationsNb { 'addServer.addPlexTitle' => 'Logg inn med Plex', 'addServer.pinExpired' => 'PIN-koden utløp før innloggingen var fullført. Prøv igjen.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunne ikke registrere kontoen: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Skriv inn URL-en til ${product}-serveren din', 'addServer.addConnectionTitle' => 'Legg til tilkobling', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Legg til for ${name}', 'addServer.signInWithPlexCard' => 'Logg inn med Plex', 'addServer.signInWithPlexCardSubtitle' => 'Autoriser denne enheten. Delte servere legges til.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Autoriser en Plex-konto. Home-brukere blir profiler.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Koble til ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Skriv inn server-URL-en, brukernavnet og passordet ditt.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Logg på ${product}-serveren din. Knyttes til ${name}.', 'addServer.borrowFromAnotherProfile' => 'Lån fra en annen profil', 'addServer.borrowFromAnotherProfileSubtitle' => 'Gjenbruk en annen profils tilkobling. PIN-beskyttede profiler krever PIN.', _ => null, diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index d1734be0..0650fbec 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -67,6 +67,7 @@ class TranslationsNl extends Translations with BaseTranslations 'Wachten op authenticatie...\nMeld je aan via je browser.'; @override String get useBrowser => 'Gebruik browser'; @override String get or => 'of'; + @override String connectToMediaBrowser({required Object product}) => 'Verbinding maken met ${product}'; @override String get useQuickConnect => 'Quick Connect gebruiken'; @override String get quickConnectInstructions => 'Open Quick Connect in Jellyfin en voer deze code in.'; @override String get quickConnectWaiting => 'Wachten op goedkeuring…'; @@ -175,6 +177,7 @@ class _Translations$common$nl extends Translations$common$en { @override String get fullscreen => 'Volledig scherm'; @override String get exitFullscreen => 'Volledig scherm verlaten'; @override String get pressBackAgainToExit => 'Druk nogmaals op terug om af te sluiten'; + @override late final _Translations$common$ratingSource$nl ratingSource = _Translations$common$ratingSource$nl._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$nl extends Translations$settings$en { @override String get darkTheme => 'Donker'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Bibliotheekdichtheid'; + @override String get displayScale => 'Weergaveschaal'; @override String get compact => 'Compact'; @override String get comfortable => 'Comfortabel'; @override String get tvCornerSpotlightBackdrop => 'Uitgelichte achtergrond in de hoek'; @@ -287,6 +291,11 @@ class _Translations$settings$nl extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => 'Automatisch (aanbevolen)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB geheugen beschikbaar. Een buffer van ${size}MB kan afspelen beïnvloeden.'; + @override String get playbackBuffer => 'Afspeelbuffer'; + @override String get playbackBufferAuto => 'Auto (aanbevolen)'; + @override String get playbackBufferLarge => 'Groot'; + @override String get playbackBufferExtraLarge => 'Extra groot'; + @override String get playbackBufferDescription => 'Buffert meer tegen onstabiele verbindingen. Ook beperkt door de buffergrootte.'; @override String get defaultQualityTitle => 'Standaardkwaliteit'; @override String get musicQualityTitle => 'Muziekkwaliteit'; @override String get subtitleStyling => 'Ondertitelopmaak'; @@ -320,6 +329,9 @@ class _Translations$settings$nl extends Translations$settings$en { @override String get debugLoggingDescription => 'Schakel gedetailleerde logboekregistratie in om problemen op te lossen'; @override String get viewLogs => 'Logbestanden bekijken'; @override String get viewLogsDescription => 'Logbestanden van de app bekijken'; + @override String get clearImageCache => 'Afbeeldingscache wissen'; + @override String get clearImageCacheDescription => 'Gecachte artwork en miniaturen wissen. Afbeeldingen kunnen langzamer laden tot ze opnieuw zijn gedownload.'; + @override String get clearImageCacheSuccess => 'Afbeeldingscache succesvol gewist'; @override String get resetSettings => 'Instellingen resetten'; @override String get resetSettingsDescription => 'Standaardinstellingen herstellen. Dit kan niet ongedaan worden gemaakt.'; @override String get resetSettingsSuccess => 'Instellingen succesvol gereset'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$nl extends Translations$fileInfo$en { // Translations @override String get title => 'Bestandsinformatie'; + @override String get overview => 'Overzicht'; @override String get video => 'Video'; @override String get audio => 'Audio'; @override String get subtitles => 'Ondertitels'; + @override String get images => 'Ingebedde afbeeldingen'; + @override String get dataStreams => 'Datastreams'; + @override String get lyrics => 'Songteksten'; @override String get file => 'Bestand'; + @override String get attachments => 'Bijlagen'; + @override String get delivery => 'Levering'; + @override String versionCounter({required Object index, required Object count}) => 'Versie ${index} van ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Bestand ${index} van ${count}'; + @override String get noStreams => 'De server rapporteerde geen streams voor dit bestand.'; + @override String get copyPath => 'Pad kopiëren'; + @override String get pathCopied => 'Bestandspad gekopieerd'; @override String get codec => 'Codec'; + @override String get codecTag => 'Codec-tag'; @override String get resolution => 'Resolutie'; + @override String get codedResolution => 'Gecodeerde resolutie'; @override String get bitrate => 'Bitrate'; @override String get frameRate => 'Framesnelheid'; + @override String get rotation => 'Rotatie'; + @override String get comment => 'Opmerking'; + @override String get audioDescription => 'Audiodescriptie'; + @override String get headerCompression => 'Headercompressie'; + @override String get sidecarFile => 'Sidecar-bestand'; + @override String get transportTimestamp => 'Transporttijdstempel'; + @override String get displayOffset => 'Display-offset'; + @override String get previewFailureCode => 'Foutcode preview'; + @override String get previewRetries => 'Previewpogingen'; @override String get aspectRatio => 'Beeldverhouding'; + @override String get pixelAspectRatio => 'Pixel-aspectratio'; @override String get profile => 'Profiel'; + @override String get level => 'Niveau'; @override String get bitDepth => 'Bitdiepte'; + @override String get pixelFormat => 'Pixelformaat'; @override String get colorSpace => 'Kleurruimte'; @override String get colorRange => 'Kleurbereik'; @override String get colorPrimaries => 'Kleurprimaires'; + @override String get colorTransfer => 'Kleurtransfer'; @override String get chromaSubsampling => 'Chroma-subsampling'; + @override String get chromaLocation => 'Chroma-positie'; + @override String get scanType => 'Scantype'; + @override String get interlaced => 'Interlaced'; + @override String get anamorphic => 'Anamorf'; + @override String get referenceFrames => 'Referentieframes'; + @override String get dynamicRange => 'Dynamisch bereik'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision-niveau'; + @override String get dolbyVisionVersion => 'Dolby Vision-versie'; + @override String get dolbyVisionLayers => 'Dolby Vision-lagen'; + @override String get baseLayerCompatibility => 'Compatibiliteit basislaag'; + @override String get avcBitstream => 'AVC-bitstroom'; + @override String get nalLengthSize => 'NAL-lengte'; + @override String get scalingMatrix => 'Aangepaste schalingsmatrix'; + @override String get streamIdentifier => 'Stream-id'; + @override String get streamIndex => 'Streamindex'; + @override String get streamId => 'Stream-ID'; + @override String get language => 'Taal'; + @override String get languageCode => 'Taalcode'; + @override String get streamTitle => 'Tracktitel'; @override String get channels => 'Kanalen'; + @override String get sampleRate => 'Samplingsnelheid'; + @override String get spatialAudio => 'Ruimtelijke audio'; + @override String get textBased => 'Op tekst gebaseerd'; + @override String get subtitleFormat => 'Sidecar-formaat'; + @override String get provider => 'Provider'; + @override String get matchScore => 'Matchscore'; + @override String get externalDelivery => 'Kan afzonderlijk worden geleverd'; + @override String get sidecarPath => 'Sidecar-pad'; + @override String get sourceStream => 'Gekopieerd van'; + @override String get temporary => 'Tijdelijk'; + @override String get timeBase => 'Tijdbasis'; @override String get overallBitrate => 'Totale bitrate'; @override String get path => 'Pad'; + @override String get fileName => 'Bestandsnaam'; @override String get size => 'Grootte'; + @override String get totalSize => 'Totale grootte'; @override String get container => 'Container'; @override String get duration => 'Duur'; + @override String get previewThumbnails => 'Preview-miniaturen'; + @override String get previewIndex => 'Preview-index'; + @override String get packetLength => 'Pakketlengte'; + @override String get filePresent => 'Bestand aanwezig'; + @override String get fileReadable => 'Leesbaar door server'; + @override String get streamPath => 'Streampad'; @override String get optimizedForStreaming => 'Geoptimaliseerd voor streaming'; @override String get has64bitOffsets => '64-bits offsets'; + @override String get protocol => 'Protocol'; + @override String get mediaType => 'Mediatype'; + @override String get sourceKind => 'Soort bron'; + @override String get optimizedVersion => 'Geoptimaliseerde versie'; + @override String get optimizationTarget => 'Optimalisatiedoel'; + @override String get deletedAt => 'Verwijderd'; + @override String get remoteSource => 'Externe bron'; + @override String get infiniteStream => 'Oneindige stream'; + @override String get directPlay => 'Direct Play'; + @override String get directStream => 'Direct Stream'; + @override String get transcoding => 'Transcoderen'; + @override String get etag => 'ETag'; + @override String get versionId => 'Versie-ID'; + @override String get fileId => 'Bestands-ID'; + @override String get defaultAudioTrack => 'Standaard audiotrack'; + @override String get defaultSubtitleTrack => 'Standaard ondertitelingstrack'; + @override String get subtitlesOff => 'Uit'; + @override String get flagDefault => 'Standaard'; + @override String get flagForced => 'Geforceerd'; + @override String get flagSelected => 'Geselecteerd'; + @override String get flagExternal => 'Extern'; + @override String get flagHearingImpaired => 'Slechthorend'; + @override String get flagDub => 'Nasynchronisatie'; + @override String get flagOriginal => 'Origineel'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$nl extends Translations$mediaMenu$en { @override String get shufflePlay => 'Willekeurig afspelen'; @override String get shuffleNotAvailableOffline => 'Willekeurig afspelen is offline niet beschikbaar'; @override String get fileInfo => 'Bestandsinformatie'; + @override String get deleteEpisodeFromServer => 'Aflevering verwijderen van server'; + @override String get deleteSeasonFromServer => 'Seizoen verwijderen van server'; + @override String get deleteShowFromServer => 'Serie verwijderen van server'; + @override String get deleteMovieFromServer => 'Film verwijderen van server'; + @override String get deleteEpisodeTitle => 'Deze aflevering verwijderen?'; + @override String get deleteSeasonTitle => 'Dit seizoen verwijderen?'; + @override String get deleteShowTitle => 'Deze serie verwijderen?'; + @override String get deleteMovieTitle => 'Deze film verwijderen?'; + @override String get deleteEpisodeConfirm => 'Aflevering verwijderen'; + @override String get deleteSeasonConfirm => 'Seizoen verwijderen'; + @override String get deleteShowConfirm => 'Serie verwijderen'; + @override String get deleteMovieConfirm => 'Film verwijderen'; + @override String get deleteAnyway => 'Toch verwijderen'; + @override String confirmDeleteTarget({required Object title}) => '${title} definitief van je server verwijderen?'; @override String get deleteMultipleWarning => 'Dit omvat alle afleveringen en hun bestanden.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: 'Hiermee wordt de ${n} aflevering erin verwijderd, inclusief het bestand.', + other: 'Hiermee worden alle ${n} afleveringen erin verwijderd, inclusief hun bestanden.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: 'Dit item wordt opgeslagen als ${n} bestand, dat wordt verwijderd.', + other: 'Dit item wordt opgeslagen over ${n} bestanden, en ze worden allemaal verwijderd.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: '${n} andere aflevering staat in hetzelfde bestand en wordt ook verwijderd:', + other: '${n} andere afleveringen staan in hetzelfde bestand en worden ook verwijderd:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy kon niet controleren welke bestanden hiermee worden verwijderd, dus het kan meer verwijderen dan het hierboven genoemde item. Annuleer en probeer het opnieuw, of verwijder toch.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Je server heeft geen bestandsgegevens voor dit item verstrekt, dus Plezy kan niet controleren welke bestanden hiermee worden verwijderd. Het kan meer verwijderen dan het hierboven genoemde item.'; @override String get mediaDeletedSuccessfully => 'Media-item succesvol verwijderd'; @override String get mediaFailedToDelete => 'Verwijderen van media-item mislukt'; @override String get rate => 'Beoordelen'; @@ -657,6 +786,9 @@ class _Translations$videoControls$nl extends Translations$videoControls$en { @override String get playNext => 'Volgende afspelen'; @override String get playButton => 'Afspelen'; @override String get pauseButton => 'Pauzeren'; + @override String get playbackPaused => 'Gepauzeerd'; + @override String get playbackResumed => 'Afspelen'; + @override String get loadingVideo => 'Video laden'; @override String get showPlaybackControls => 'Afspeelbediening tonen'; @override String get hidePlaybackControls => 'Afspeelbediening verbergen'; @override String seekBackwardButton({required Object seconds}) => '${seconds} seconden terugspoelen'; @@ -726,6 +858,7 @@ class _Translations$messages$nl extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Verwijderd uit \'Doorgaan met kijken\''; @override String errorLoading({required Object error}) => 'Fout: ${error}'; + @override String get searchPartialResults => 'Sommige mediaservers konden niet worden doorzocht. Beschikbare resultaten worden getoond.'; @override String get streamInterrupted => 'De stream is onderbroken. Druk op afspelen of spoel om het opnieuw te proberen.'; @override String get liveStreamInterrupted => 'De livestream is onderbroken. Druk op afspelen om het opnieuw te proberen.'; @override String get fileInfoNotAvailable => 'Bestandsinformatie niet beschikbaar'; @@ -764,6 +897,8 @@ class _Translations$messages$nl extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Overschakelen naar compatibele speler...'; @override String get serverLimitTitle => 'Afspelen mislukt'; @override String get serverLimitBody => 'Serverfout (HTTP 500). Waarschijnlijk weigerde een bandbreedte-/transcodeerlimiet deze sessie. Vraag de eigenaar dit aan te passen.'; + @override String get mediaUnreadableTitle => 'Bestand niet beschikbaar'; + @override String get mediaUnreadableBody => 'De server heeft dit item gevonden maar kon het bestand niet lezen (HTTP 404). Het bestand is waarschijnlijk verplaatst of verwijderd, of de opslag is offline. Vraag de serverbeheerder om het bestand te controleren en de bibliotheek opnieuw te scannen.'; @override String get logsUploaded => 'Logbestanden geüpload'; @override String get logsUploadFailed => 'Uploaden van logbestanden mislukt'; @override String get logId => 'Logboek-ID'; @@ -917,6 +1052,8 @@ class _Translations$connections$nl extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sessie verlopen voor ${name}'; @override String sessionExpiredMany({required Object count}) => 'Sessie verlopen voor ${count} servers'; @override String get signInAgain => 'Opnieuw aanmelden'; + @override String editMediaBrowserTitle({required Object product}) => '${product}-verbinding bewerken'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Voeg URL\'s toe aan ${serverName} of verwijder ze. Plezy gebruikt de bereikbare URL met de laagste latentie.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$nl extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Zoeken mislukt: ${error}'; + @override String get searchUnavailable => 'Zoeken kon geen enkele mediaserver bereiken.'; @override String connectionTimeout({required Object context}) => 'Time-out van verbinding tijdens het laden van ${context}'; @override String get connectionFailed => 'Kan geen verbinding maken met mediaserver'; @override String unableToLoad({required Object context}) => 'Kan ${context} niet laden. Probeer het opnieuw.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$nl extends Translations$logs$en { @override String get uploadLogs => 'Logbestanden uploaden'; } +// Path: startup +class _Translations$startup$nl extends Translations$startup$en { + _Translations$startup$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy kon niet starten'; + @override String get failedBody => 'Er is iets misgegaan tijdens het opstarten. De onderstaande details laten zien wat er misging.'; + @override String get failedBodyRepairable => 'Het opgeslagen instellingenbestand van Plezy is beschadigd en moet opnieuw worden opgebouwd voordat Plezy kan starten. Opnieuw proberen helpt niet — kies \'Opslag repareren\'.'; + @override String get phaseLabel => 'Stap'; + @override String get showDetails => 'Details tonen'; + @override String get hideDetails => 'Details verbergen'; + @override String get copyDetails => 'Details kopiëren'; + @override String get detailsCopied => 'Details naar het klembord gekopieerd'; + @override String get uploadDetails => 'Details uploaden'; + @override String get repairStorage => 'Opslag repareren'; + @override String get repairTitle => 'Opgeslagen gegevens repareren?'; + @override String get repairBodyCommon => 'Het instellingenbestand van Plezy is beschadigd en kan niet worden gelezen. Door te repareren worden alle instellingen teruggezet naar hun standaardwaarde.'; + @override String get repairBodyOneCredential => 'Eén opgeslagen aanmelding is beschadigd en kan niet worden gelezen. Door te repareren wordt alleen die ene verwijderd; je andere instellingen blijven onaangetast.'; + @override String get repairBodySignInsKept => 'Je servers en profielen blijven naar verwachting aangemeld.'; + @override String get repairBodySignInsLost => 'De sleutel die je opgeslagen aanmeldingen beschermt, kan niet uit dit bestand worden hersteld. Je moet je daarom opnieuw aanmelden bij elke server en elk profiel. Er wordt niets op je mediaserver gewijzigd.'; + @override String get repairBodySessionsUncertain => 'Trackers (MAL, AniList, Simkl, Trakt) en Seerr worden apart opgeslagen en blijven mogelijk wel of niet bewaard. Plezy vertelt je precies wat het heeft bewaard.'; + @override String get repairConfirm => 'Repareren'; + @override String get repairSucceeded => 'Opslag gerepareerd'; + @override String get repairNeedsRestart => 'Opslag gerepareerd — herstart vereist'; + @override String get restartRequiredBody => 'Je gegevens zijn gerepareerd, maar Plezy moet opnieuw starten voordat het ze kan gebruiken. Sluit Plezy en open het opnieuw.'; + @override String get quitPlezy => 'Plezy afsluiten'; + @override String get repairFailed => 'Repareren mislukt'; + @override String get repairKeptSignIns => 'Je servers en profielen zijn nog steeds aangemeld.'; + @override String get repairLostSignIns => 'De sleutel die je opgeslagen aanmeldingen beschermt, kon niet worden hersteld. Je moet je opnieuw aanmelden bij elke server en elk profiel.'; + @override String get repairLostSessions => 'Er is minstens één tracker- of Seerr-verbinding verloren gegaan en die moet opnieuw worden verbonden.'; + @override String get backupTitle => 'Er is een kopie van het beschadigde bestand bewaard'; + @override String get backupWarning => 'Het bevat je aanmeldgegevens. Upload of deel het niet.'; + @override String get deleteBackup => 'Kopie verwijderen'; + @override String get backupDeleted => 'Kopie verwijderd.'; + @override String get previousFailureTitle => 'Plezy kon de vorige keer niet starten'; +} + // Path: licenses class _Translations$licenses$nl extends Translations$licenses$en { _Translations$licenses$nl._(TranslationsNl root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$nl extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Geen resultaten voor "${query}"'; @override String searchPrompt({required Object source}) => 'Zoek naar films en series op ${source}.'; @override String get searchFailed => 'Zoeken mislukt. Controleer je verbinding en probeer opnieuw.'; + @override late final _Translations$explore$badge$nl badge = _Translations$explore$badge$nl._(_root); + @override late final _Translations$explore$stats$nl stats = _Translations$explore$stats$nl._(_root); + @override late final _Translations$explore$season$nl season = _Translations$explore$season$nl._(_root); + @override late final _Translations$explore$format$nl format = _Translations$explore$format$nl._(_root); + @override late final _Translations$explore$sourceMaterial$nl sourceMaterial = _Translations$explore$sourceMaterial$nl._(_root); + @override late final _Translations$explore$creditRole$nl creditRole = _Translations$explore$creditRole$nl._(_root); + @override late final _Translations$explore$relation$nl relation = _Translations$explore$relation$nl._(_root); + @override String broadcast({required Object day, required Object time}) => 'Wordt uitgezonden op ${day} om ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Wordt uitgezonden op ${day} om ${time} ${timezone}'; + @override late final _Translations$explore$detail$nl detail = _Translations$explore$detail$nl._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: '${n} resultaat', + other: '${n} resultaten', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$nl extends Translations$downloads$en { @override String get editSyncRule => 'Synchronisatieregel bewerken'; @override String get removeSyncRule => 'Synchronisatieregel verwijderen'; @override String removeSyncRuleConfirm({required Object title}) => 'Synchronisatie van "${title}" stoppen? Gedownloade afleveringen worden behouden.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Stoppen met synchroniseren van "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Gekoppelde downloads ook verwijderen'; + @override String get deleteSyncRuleDownloadsDescription => 'Downloads die door een andere synchronisatieregel of een ander profiel worden gebruikt, blijven behouden.'; @override String syncRuleCreated({required Object count}) => 'Synchronisatieregel aangemaakt — ${count} onbekeken afleveringen behouden'; @override String get syncRuleUpdated => 'Synchronisatieregel bijgewerkt'; @override String get syncRuleRemoved => 'Synchronisatieregel verwijderd'; + @override String get syncRuleAndDownloadsRemoved => 'Synchronisatieregel en gekoppelde downloads verwijderd'; + @override String get syncRuleCleanupBusy => 'Synchronisatieregels worden momenteel bijgewerkt. Probeer het over een moment opnieuw.'; + @override String get syncRuleCleanupUnavailable => 'Gekoppelde downloads konden niet veilig worden geïdentificeerd. Maak opnieuw verbinding met de server en probeer het opnieuw, of verwijder de regel zonder de downloads te verwijderen.'; @override String syncedNewEpisodes({required Object count, required Object title}) => '${count} nieuwe afleveringen gesynchroniseerd voor ${title}'; @override String get activeSyncRules => 'Synchronisatieregels'; @override String get noSyncRules => 'Geen synchronisatieregels'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$nl extends Translations$addServer$en { final TranslationsNl _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product}-server toevoegen'; @override String get serverUrls => 'Server-URL\'s'; @override String get serverUrlsHelper => 'Meerdere URL\'s toegestaan, gescheiden door komma\'s.'; @override String get findServer => 'Server zoeken'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Zoeken naar lokale ${product}-servers...'; + @override String localMediaBrowserServers({required Object product}) => 'Lokale ${product}-servers'; @override String get username => 'Gebruikersnaam'; @override String get password => 'Wachtwoord'; @override String get signIn => 'Inloggen'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$nl extends Translations$addServer$en { @override String get addPlexTitle => 'Inloggen met Plex'; @override String get pinExpired => 'De pincode verliep voordat je kon inloggen. Probeer het opnieuw.'; @override String failedToRegisterAccount({required Object error}) => 'Account registreren mislukt: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Voer de URL van je ${product}-server in'; @override String get addConnectionTitle => 'Verbinding toevoegen'; @override String addConnectionTitleScoped({required Object name}) => 'Toevoegen aan ${name}'; @override String get signInWithPlexCard => 'Inloggen met Plex'; @override String get signInWithPlexCardSubtitle => 'Autoriseer dit apparaat. Gedeelde servers worden toegevoegd.'; @override String get signInWithPlexCardSubtitleScoped => 'Autoriseer een Plex-account. Home-gebruikers worden profielen.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Verbinding maken met ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Voer je server-URL, gebruikersnaam en wachtwoord in.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Meld je aan bij je ${product}-server. Wordt gekoppeld aan ${name}.'; @override String get borrowFromAnotherProfile => 'Van een ander profiel lenen'; @override String get borrowFromAnotherProfileSubtitle => 'Hergebruik de verbinding van een ander profiel. Voor profielen met pincodebeveiliging is een pincode vereist.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$nl extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get critic => 'Critici'; + @override String get audience => 'Publiek'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes-critici'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes-publiek'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$nl extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$nl._(TranslationsNl root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$nl extends Translations$explore$status$en { @override String get upcoming => 'Binnenkort'; } +// Path: explore.badge +class _Translations$explore$badge$nl extends Translations$explore$badge$en { + _Translations$explore$badge$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} populair'; + @override String rankAiring({required Object n}) => '#${n} nu op tv'; + @override String rankRated({required Object n}) => '#${n} beoordeeld'; + @override String rankFavorited({required Object n}) => '#${n} favoriet'; + @override String rankTrending({required Object n}) => '#${n} trending'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} in ${season}'; + @override String watchingNow({required Object n}) => '${n} kijken'; + @override String get available => 'Beschikbaar'; + @override String get partiallyAvailable => 'Gedeeltelijk beschikbaar'; + @override String get availableIn4k => '4K beschikbaar'; + @override String get requested => 'Aangevraagd'; + @override String get pendingApproval => 'In afwachting van goedkeuring'; + @override String get processing => 'Wordt verwerkt'; + @override String get declined => 'Afgewezen'; + @override String get requestFailed => 'Aanvraag mislukt'; + @override String get requested4k => '4K aangevraagd'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} seizoenen'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Afl. ${episode} over ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Volgende over ${duration}'; + @override String episodesShort({required Object n}) => '${n} afl.'; + @override String minutesPerEpisode({required Object n}) => '${n} min/afl.'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$nl extends Translations$explore$stats$en { + _Translations$explore$stats$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} op de lijst'; + @override String viewersDay({required Object n}) => '${n} vandaag bekeken'; + @override String viewersWeek({required Object n}) => '${n} deze week bekeken'; + @override String viewersMonth({required Object n}) => '${n} deze maand bekeken'; + @override String viewersYear({required Object n}) => '${n} dit jaar bekeken'; + @override String viewersAllTime({required Object n}) => '${n} kijkers'; + @override String planning({required Object n}) => '${n} van plan om te kijken'; + @override String favorited({required Object n}) => '${n} favorieten'; + @override String dropRate({required Object percent}) => '${percent} is ermee gestopt'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: '${n} reactie', + other: '${n} reacties', + ); + @override String votes({required Object n}) => '${n} stemmen'; + @override String watching({required Object n}) => '${n} kijken ernaar'; + @override String completed({required Object n}) => '${n} afgerond'; + @override String onHold({required Object n}) => '${n} op pauze'; + @override String dropped({required Object n}) => '${n} gestopt'; +} + +// Path: explore.season +class _Translations$explore$season$nl extends Translations$explore$season$en { + _Translations$explore$season$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get winter => 'Winter'; + @override String get spring => 'Lente'; + @override String get summer => 'Zomer'; + @override String get fall => 'Herfst'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$nl extends Translations$explore$format$en { + _Translations$explore$format$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'Korte tv-serie'; + @override String get movie => 'Film'; + @override String get special => 'Special'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Muziek'; + @override String get other => 'Anders'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$nl extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get original => 'Origineel'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Game'; + @override String get webComic => 'Webcomic'; + @override String get musicRelease => 'Muziek'; + @override String get otherMedia => 'Anders'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$nl extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get director => 'Regisseur'; + @override String get writer => 'Schrijver'; + @override String get producer => 'Producent'; + @override String get creator => 'Maker'; + @override String get composer => 'Componist'; +} + +// Path: explore.relation +class _Translations$explore$relation$nl extends Translations$explore$relation$en { + _Translations$explore$relation$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Sequel'; + @override String get sideStory => 'Side story'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternatieve versie'; + @override String get summary => 'Samenvatting'; + @override String get parentStory => 'Hoofdverhaal'; + @override String get adaptation => 'Adaptatie'; + @override String get other => 'Gerelateerd'; +} + +// Path: explore.detail +class _Translations$explore$detail$nl extends Translations$explore$detail$en { + _Translations$explore$detail$nl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Originele titel'; + @override String get alsoKnownAs => 'Ook bekend als'; + @override String get studios => 'Studio\'s'; + @override String get country => 'Land'; + @override String get language => 'Taal'; + @override String get released => 'Uitgebracht'; + @override String get physicalRelease => 'Op schijf'; + @override String get ended => 'Beëindigd'; + @override String addedOn({required Object date}) => 'Toegevoegd op ${date}'; + @override String get yourRating => 'Jouw beoordeling'; + @override String get budget => 'Budget'; + @override String get revenue => 'Box office'; + @override String get contentAdvisory => 'Leeftijdsadvies'; + @override String get tags => 'Tags'; + @override String get revealSpoilerTags => 'Spoilertags tonen'; + @override String get links => 'Links'; + @override String get watchOn => 'Bekijk op'; + @override String get watchTrailer => 'Trailer bekijken'; + @override String openOn({required Object site}) => 'Openen op ${site}'; + @override String get crew => 'Crew'; + @override String get ratings => 'Beoordelingen'; + @override String get schedule => 'Uitzendschema'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: 'Aanbevolen door ${n} gebruiker', + other: 'Aanbevolen door ${n} gebruikers', + ); + @override String recommendedBy({required Object who}) => 'Aanbevolen door ${who}'; + @override String favoritedBy({required Object who}) => 'Favoriet bij ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} nog niet uitgezonden'; + @override String recommendedByPercent({required Object percent}) => 'Aanbevolen door ${percent} van de kijkers'; + @override String get relatedTitles => 'Gerelateerde titels'; + @override String get background => 'Achtergrond'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$nl extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$nl._(TranslationsNl root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$nl extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsNl { 'auth.waitingForAuth' => 'Wachten op authenticatie...\nMeld je aan via je browser.', 'auth.useBrowser' => 'Gebruik browser', 'auth.or' => 'of', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Verbinding maken met ${product}', 'auth.useQuickConnect' => 'Quick Connect gebruiken', 'auth.quickConnectInstructions' => 'Open Quick Connect in Jellyfin en voer deze code in.', 'auth.quickConnectWaiting' => 'Wachten op goedkeuring…', @@ -2248,6 +2654,17 @@ extension on TranslationsNl { 'common.fullscreen' => 'Volledig scherm', 'common.exitFullscreen' => 'Volledig scherm verlaten', 'common.pressBackAgainToExit' => 'Druk nogmaals op terug om af te sluiten', + 'common.ratingSource.critic' => 'Critici', + 'common.ratingSource.audience' => 'Publiek', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes-critici', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes-publiek', 'screens.licenses' => 'Licenties', 'screens.switchProfile' => 'Wissel van profiel', 'screens.subtitleStyling' => 'Ondertitelopmaak', @@ -2284,6 +2701,7 @@ extension on TranslationsNl { 'settings.darkTheme' => 'Donker', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Bibliotheekdichtheid', + 'settings.displayScale' => 'Weergaveschaal', 'settings.compact' => 'Compact', 'settings.comfortable' => 'Comfortabel', 'settings.tvCornerSpotlightBackdrop' => 'Uitgelichte achtergrond in de hoek', @@ -2333,6 +2751,11 @@ extension on TranslationsNl { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => 'Automatisch (aanbevolen)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB geheugen beschikbaar. Een buffer van ${size}MB kan afspelen beïnvloeden.', + 'settings.playbackBuffer' => 'Afspeelbuffer', + 'settings.playbackBufferAuto' => 'Auto (aanbevolen)', + 'settings.playbackBufferLarge' => 'Groot', + 'settings.playbackBufferExtraLarge' => 'Extra groot', + 'settings.playbackBufferDescription' => 'Buffert meer tegen onstabiele verbindingen. Ook beperkt door de buffergrootte.', 'settings.defaultQualityTitle' => 'Standaardkwaliteit', 'settings.musicQualityTitle' => 'Muziekkwaliteit', 'settings.subtitleStyling' => 'Ondertitelopmaak', @@ -2366,6 +2789,9 @@ extension on TranslationsNl { 'settings.debugLoggingDescription' => 'Schakel gedetailleerde logboekregistratie in om problemen op te lossen', 'settings.viewLogs' => 'Logbestanden bekijken', 'settings.viewLogsDescription' => 'Logbestanden van de app bekijken', + 'settings.clearImageCache' => 'Afbeeldingscache wissen', + 'settings.clearImageCacheDescription' => 'Gecachte artwork en miniaturen wissen. Afbeeldingen kunnen langzamer laden tot ze opnieuw zijn gedownload.', + 'settings.clearImageCacheSuccess' => 'Afbeeldingscache succesvol gewist', 'settings.resetSettings' => 'Instellingen resetten', 'settings.resetSettingsDescription' => 'Standaardinstellingen herstellen. Dit kan niet ongedaan worden gemaakt.', 'settings.resetSettingsSuccess' => 'Instellingen succesvol gereset', @@ -2549,29 +2975,118 @@ extension on TranslationsNl { 'hotkeys.actions.skipMarker' => 'Intro/aftiteling overslaan', 'hotkeys.actions.screenshot' => 'Schermafbeelding maken', 'fileInfo.title' => 'Bestandsinformatie', + 'fileInfo.overview' => 'Overzicht', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Audio', 'fileInfo.subtitles' => 'Ondertitels', + 'fileInfo.images' => 'Ingebedde afbeeldingen', + 'fileInfo.dataStreams' => 'Datastreams', + 'fileInfo.lyrics' => 'Songteksten', 'fileInfo.file' => 'Bestand', + 'fileInfo.attachments' => 'Bijlagen', + 'fileInfo.delivery' => 'Levering', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Versie ${index} van ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Bestand ${index} van ${count}', + 'fileInfo.noStreams' => 'De server rapporteerde geen streams voor dit bestand.', + 'fileInfo.copyPath' => 'Pad kopiëren', + 'fileInfo.pathCopied' => 'Bestandspad gekopieerd', 'fileInfo.codec' => 'Codec', + 'fileInfo.codecTag' => 'Codec-tag', 'fileInfo.resolution' => 'Resolutie', + 'fileInfo.codedResolution' => 'Gecodeerde resolutie', 'fileInfo.bitrate' => 'Bitrate', 'fileInfo.frameRate' => 'Framesnelheid', + 'fileInfo.rotation' => 'Rotatie', + 'fileInfo.comment' => 'Opmerking', + 'fileInfo.audioDescription' => 'Audiodescriptie', + 'fileInfo.headerCompression' => 'Headercompressie', + 'fileInfo.sidecarFile' => 'Sidecar-bestand', + 'fileInfo.transportTimestamp' => 'Transporttijdstempel', + 'fileInfo.displayOffset' => 'Display-offset', + 'fileInfo.previewFailureCode' => 'Foutcode preview', + 'fileInfo.previewRetries' => 'Previewpogingen', 'fileInfo.aspectRatio' => 'Beeldverhouding', + 'fileInfo.pixelAspectRatio' => 'Pixel-aspectratio', 'fileInfo.profile' => 'Profiel', + 'fileInfo.level' => 'Niveau', 'fileInfo.bitDepth' => 'Bitdiepte', + 'fileInfo.pixelFormat' => 'Pixelformaat', 'fileInfo.colorSpace' => 'Kleurruimte', 'fileInfo.colorRange' => 'Kleurbereik', 'fileInfo.colorPrimaries' => 'Kleurprimaires', + 'fileInfo.colorTransfer' => 'Kleurtransfer', 'fileInfo.chromaSubsampling' => 'Chroma-subsampling', + 'fileInfo.chromaLocation' => 'Chroma-positie', + 'fileInfo.scanType' => 'Scantype', + 'fileInfo.interlaced' => 'Interlaced', + 'fileInfo.anamorphic' => 'Anamorf', + 'fileInfo.referenceFrames' => 'Referentieframes', + 'fileInfo.dynamicRange' => 'Dynamisch bereik', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision-niveau', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision-versie', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision-lagen', + 'fileInfo.baseLayerCompatibility' => 'Compatibiliteit basislaag', + 'fileInfo.avcBitstream' => 'AVC-bitstroom', + 'fileInfo.nalLengthSize' => 'NAL-lengte', + 'fileInfo.scalingMatrix' => 'Aangepaste schalingsmatrix', + 'fileInfo.streamIdentifier' => 'Stream-id', + 'fileInfo.streamIndex' => 'Streamindex', + 'fileInfo.streamId' => 'Stream-ID', + 'fileInfo.language' => 'Taal', + 'fileInfo.languageCode' => 'Taalcode', + 'fileInfo.streamTitle' => 'Tracktitel', 'fileInfo.channels' => 'Kanalen', + 'fileInfo.sampleRate' => 'Samplingsnelheid', + 'fileInfo.spatialAudio' => 'Ruimtelijke audio', + 'fileInfo.textBased' => 'Op tekst gebaseerd', + 'fileInfo.subtitleFormat' => 'Sidecar-formaat', + 'fileInfo.provider' => 'Provider', + 'fileInfo.matchScore' => 'Matchscore', + 'fileInfo.externalDelivery' => 'Kan afzonderlijk worden geleverd', + 'fileInfo.sidecarPath' => 'Sidecar-pad', + 'fileInfo.sourceStream' => 'Gekopieerd van', + 'fileInfo.temporary' => 'Tijdelijk', + 'fileInfo.timeBase' => 'Tijdbasis', 'fileInfo.overallBitrate' => 'Totale bitrate', 'fileInfo.path' => 'Pad', + 'fileInfo.fileName' => 'Bestandsnaam', 'fileInfo.size' => 'Grootte', + 'fileInfo.totalSize' => 'Totale grootte', 'fileInfo.container' => 'Container', 'fileInfo.duration' => 'Duur', + 'fileInfo.previewThumbnails' => 'Preview-miniaturen', + 'fileInfo.previewIndex' => 'Preview-index', + 'fileInfo.packetLength' => 'Pakketlengte', + 'fileInfo.filePresent' => 'Bestand aanwezig', + 'fileInfo.fileReadable' => 'Leesbaar door server', + 'fileInfo.streamPath' => 'Streampad', 'fileInfo.optimizedForStreaming' => 'Geoptimaliseerd voor streaming', 'fileInfo.has64bitOffsets' => '64-bits offsets', + 'fileInfo.protocol' => 'Protocol', + 'fileInfo.mediaType' => 'Mediatype', + 'fileInfo.sourceKind' => 'Soort bron', + 'fileInfo.optimizedVersion' => 'Geoptimaliseerde versie', + 'fileInfo.optimizationTarget' => 'Optimalisatiedoel', + 'fileInfo.deletedAt' => 'Verwijderd', + 'fileInfo.remoteSource' => 'Externe bron', + 'fileInfo.infiniteStream' => 'Oneindige stream', + 'fileInfo.directPlay' => 'Direct Play', + 'fileInfo.directStream' => 'Direct Stream', + 'fileInfo.transcoding' => 'Transcoderen', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Versie-ID', + 'fileInfo.fileId' => 'Bestands-ID', + 'fileInfo.defaultAudioTrack' => 'Standaard audiotrack', + 'fileInfo.defaultSubtitleTrack' => 'Standaard ondertitelingstrack', + 'fileInfo.subtitlesOff' => 'Uit', + 'fileInfo.flagDefault' => 'Standaard', + 'fileInfo.flagForced' => 'Geforceerd', + 'fileInfo.flagSelected' => 'Geselecteerd', + 'fileInfo.flagExternal' => 'Extern', + 'fileInfo.flagHearingImpaired' => 'Slechthorend', + 'fileInfo.flagDub' => 'Nasynchronisatie', + 'fileInfo.flagOriginal' => 'Origineel', 'mediaMenu.markAsWatched' => 'Als bekeken markeren', 'mediaMenu.markAsUnwatched' => 'Als ongekeken markeren', 'mediaMenu.removeFromContinueWatching' => 'Uit \'Doorgaan met kijken\' verwijderen', @@ -2580,7 +3095,28 @@ extension on TranslationsNl { 'mediaMenu.shufflePlay' => 'Willekeurig afspelen', 'mediaMenu.shuffleNotAvailableOffline' => 'Willekeurig afspelen is offline niet beschikbaar', 'mediaMenu.fileInfo' => 'Bestandsinformatie', + 'mediaMenu.deleteEpisodeFromServer' => 'Aflevering verwijderen van server', + 'mediaMenu.deleteSeasonFromServer' => 'Seizoen verwijderen van server', + 'mediaMenu.deleteShowFromServer' => 'Serie verwijderen van server', + 'mediaMenu.deleteMovieFromServer' => 'Film verwijderen van server', + 'mediaMenu.deleteEpisodeTitle' => 'Deze aflevering verwijderen?', + 'mediaMenu.deleteSeasonTitle' => 'Dit seizoen verwijderen?', + 'mediaMenu.deleteShowTitle' => 'Deze serie verwijderen?', + 'mediaMenu.deleteMovieTitle' => 'Deze film verwijderen?', + 'mediaMenu.deleteEpisodeConfirm' => 'Aflevering verwijderen', + 'mediaMenu.deleteSeasonConfirm' => 'Seizoen verwijderen', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Serie verwijderen', + 'mediaMenu.deleteMovieConfirm' => 'Film verwijderen', + 'mediaMenu.deleteAnyway' => 'Toch verwijderen', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '${title} definitief van je server verwijderen?', 'mediaMenu.deleteMultipleWarning' => 'Dit omvat alle afleveringen en hun bestanden.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: 'Hiermee wordt de ${n} aflevering erin verwijderd, inclusief het bestand.', other: 'Hiermee worden alle ${n} afleveringen erin verwijderd, inclusief hun bestanden.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: 'Dit item wordt opgeslagen als ${n} bestand, dat wordt verwijderd.', other: 'Dit item wordt opgeslagen over ${n} bestanden, en ze worden allemaal verwijderd.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: '${n} andere aflevering staat in hetzelfde bestand en wordt ook verwijderd:', other: '${n} andere afleveringen staan in hetzelfde bestand en worden ook verwijderd:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy kon niet controleren welke bestanden hiermee worden verwijderd, dus het kan meer verwijderen dan het hierboven genoemde item. Annuleer en probeer het opnieuw, of verwijder toch.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Je server heeft geen bestandsgegevens voor dit item verstrekt, dus Plezy kan niet controleren welke bestanden hiermee worden verwijderd. Het kan meer verwijderen dan het hierboven genoemde item.', 'mediaMenu.mediaDeletedSuccessfully' => 'Media-item succesvol verwijderd', 'mediaMenu.mediaFailedToDelete' => 'Verwijderen van media-item mislukt', 'mediaMenu.rate' => 'Beoordelen', @@ -2646,6 +3182,9 @@ extension on TranslationsNl { 'videoControls.playNext' => 'Volgende afspelen', 'videoControls.playButton' => 'Afspelen', 'videoControls.pauseButton' => 'Pauzeren', + 'videoControls.playbackPaused' => 'Gepauzeerd', + 'videoControls.playbackResumed' => 'Afspelen', + 'videoControls.loadingVideo' => 'Video laden', 'videoControls.showPlaybackControls' => 'Afspeelbediening tonen', 'videoControls.hidePlaybackControls' => 'Afspeelbediening verbergen', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} seconden terugspoelen', @@ -2700,8 +3239,6 @@ extension on TranslationsNl { 'videoControls.subtitleDownloaded' => 'Ondertitel gedownload', 'videoControls.subtitleDownloadedNotApplied' => 'De ondertiteling is gedownload, maar kon niet worden geselecteerd', 'videoControls.subtitleDownloadFailed' => 'Ondertitel downloaden mislukt', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Talen zoeken...', 'messages.markedAsWatched' => 'Gemarkeerd als gekeken', 'messages.markedAsUnwatched' => 'Gemarkeerd als ongekeken', @@ -2711,6 +3248,7 @@ extension on TranslationsNl { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: 'Automatisch ${n} bekeken download verwijderd', other: 'Automatisch ${n} bekeken downloads verwijderd', ), 'messages.removedFromContinueWatching' => 'Verwijderd uit \'Doorgaan met kijken\'', 'messages.errorLoading' => ({required Object error}) => 'Fout: ${error}', + 'messages.searchPartialResults' => 'Sommige mediaservers konden niet worden doorzocht. Beschikbare resultaten worden getoond.', 'messages.streamInterrupted' => 'De stream is onderbroken. Druk op afspelen of spoel om het opnieuw te proberen.', 'messages.liveStreamInterrupted' => 'De livestream is onderbroken. Druk op afspelen om het opnieuw te proberen.', 'messages.fileInfoNotAvailable' => 'Bestandsinformatie niet beschikbaar', @@ -2749,6 +3287,8 @@ extension on TranslationsNl { 'messages.switchingToCompatiblePlayer' => 'Overschakelen naar compatibele speler...', 'messages.serverLimitTitle' => 'Afspelen mislukt', 'messages.serverLimitBody' => 'Serverfout (HTTP 500). Waarschijnlijk weigerde een bandbreedte-/transcodeerlimiet deze sessie. Vraag de eigenaar dit aan te passen.', + 'messages.mediaUnreadableTitle' => 'Bestand niet beschikbaar', + 'messages.mediaUnreadableBody' => 'De server heeft dit item gevonden maar kon het bestand niet lezen (HTTP 404). Het bestand is waarschijnlijk verplaatst of verwijderd, of de opslag is offline. Vraag de serverbeheerder om het bestand te controleren en de bibliotheek opnieuw te scannen.', 'messages.logsUploaded' => 'Logbestanden geüpload', 'messages.logsUploadFailed' => 'Uploaden van logbestanden mislukt', 'messages.logId' => 'Logboek-ID', @@ -2857,6 +3397,8 @@ extension on TranslationsNl { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sessie verlopen voor ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sessie verlopen voor ${count} servers', 'connections.signInAgain' => 'Opnieuw aanmelden', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '${product}-verbinding bewerken', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Voeg URL\'s toe aan ${serverName} of verwijder ze. Plezy gebruikt de bereikbare URL met de laagste latentie.', 'discover.title' => 'Ontdekken', 'discover.noContentAvailable' => 'Geen inhoud beschikbaar', 'discover.addMediaToLibraries' => 'Voeg wat media toe aan je bibliotheken', @@ -2882,6 +3424,7 @@ extension on TranslationsNl { 'discover.minutesLeft' => ({required Object minutes}) => 'nog ${minutes} min', 'discover.moreLikeThis' => 'Meer zoals dit', 'errors.searchFailed' => ({required Object error}) => 'Zoeken mislukt: ${error}', + 'errors.searchUnavailable' => 'Zoeken kon geen enkele mediaserver bereiken.', 'errors.connectionTimeout' => ({required Object context}) => 'Time-out van verbinding tijdens het laden van ${context}', 'errors.connectionFailed' => 'Kan geen verbinding maken met mediaserver', 'errors.unableToLoad' => ({required Object context}) => 'Kan ${context} niet laden. Probeer het opnieuw.', @@ -2989,6 +3532,36 @@ extension on TranslationsNl { 'logs.clearLogs' => 'Logbestanden wissen', 'logs.copyLogs' => 'Logbestanden kopiëren', 'logs.uploadLogs' => 'Logbestanden uploaden', + 'startup.failedTitle' => 'Plezy kon niet starten', + 'startup.failedBody' => 'Er is iets misgegaan tijdens het opstarten. De onderstaande details laten zien wat er misging.', + 'startup.failedBodyRepairable' => 'Het opgeslagen instellingenbestand van Plezy is beschadigd en moet opnieuw worden opgebouwd voordat Plezy kan starten. Opnieuw proberen helpt niet — kies \'Opslag repareren\'.', + 'startup.phaseLabel' => 'Stap', + 'startup.showDetails' => 'Details tonen', + 'startup.hideDetails' => 'Details verbergen', + 'startup.copyDetails' => 'Details kopiëren', + 'startup.detailsCopied' => 'Details naar het klembord gekopieerd', + 'startup.uploadDetails' => 'Details uploaden', + 'startup.repairStorage' => 'Opslag repareren', + 'startup.repairTitle' => 'Opgeslagen gegevens repareren?', + 'startup.repairBodyCommon' => 'Het instellingenbestand van Plezy is beschadigd en kan niet worden gelezen. Door te repareren worden alle instellingen teruggezet naar hun standaardwaarde.', + 'startup.repairBodyOneCredential' => 'Eén opgeslagen aanmelding is beschadigd en kan niet worden gelezen. Door te repareren wordt alleen die ene verwijderd; je andere instellingen blijven onaangetast.', + 'startup.repairBodySignInsKept' => 'Je servers en profielen blijven naar verwachting aangemeld.', + 'startup.repairBodySignInsLost' => 'De sleutel die je opgeslagen aanmeldingen beschermt, kan niet uit dit bestand worden hersteld. Je moet je daarom opnieuw aanmelden bij elke server en elk profiel. Er wordt niets op je mediaserver gewijzigd.', + 'startup.repairBodySessionsUncertain' => 'Trackers (MAL, AniList, Simkl, Trakt) en Seerr worden apart opgeslagen en blijven mogelijk wel of niet bewaard. Plezy vertelt je precies wat het heeft bewaard.', + 'startup.repairConfirm' => 'Repareren', + 'startup.repairSucceeded' => 'Opslag gerepareerd', + 'startup.repairNeedsRestart' => 'Opslag gerepareerd — herstart vereist', + 'startup.restartRequiredBody' => 'Je gegevens zijn gerepareerd, maar Plezy moet opnieuw starten voordat het ze kan gebruiken. Sluit Plezy en open het opnieuw.', + 'startup.quitPlezy' => 'Plezy afsluiten', + 'startup.repairFailed' => 'Repareren mislukt', + 'startup.repairKeptSignIns' => 'Je servers en profielen zijn nog steeds aangemeld.', + 'startup.repairLostSignIns' => 'De sleutel die je opgeslagen aanmeldingen beschermt, kon niet worden hersteld. Je moet je opnieuw aanmelden bij elke server en elk profiel.', + 'startup.repairLostSessions' => 'Er is minstens één tracker- of Seerr-verbinding verloren gegaan en die moet opnieuw worden verbonden.', + 'startup.backupTitle' => 'Er is een kopie van het beschadigde bestand bewaard', + 'startup.backupWarning' => 'Het bevat je aanmeldgegevens. Upload of deel het niet.', + 'startup.deleteBackup' => 'Kopie verwijderen', + 'startup.backupDeleted' => 'Kopie verwijderd.', + 'startup.previousFailureTitle' => 'Plezy kon de vorige keer niet starten', 'licenses.relatedPackages' => 'Gerelateerde pakketten', 'licenses.license' => 'Licentie', 'licenses.licenseNumber' => ({required Object number}) => 'Licentie ${number}', @@ -3032,6 +3605,113 @@ extension on TranslationsNl { 'explore.searchEmpty' => ({required Object query}) => 'Geen resultaten voor "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Zoek naar films en series op ${source}.', 'explore.searchFailed' => 'Zoeken mislukt. Controleer je verbinding en probeer opnieuw.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} populair', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} nu op tv', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} beoordeeld', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favoriet', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} trending', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} in ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} kijken', + 'explore.badge.available' => 'Beschikbaar', + 'explore.badge.partiallyAvailable' => 'Gedeeltelijk beschikbaar', + 'explore.badge.availableIn4k' => '4K beschikbaar', + 'explore.badge.requested' => 'Aangevraagd', + 'explore.badge.pendingApproval' => 'In afwachting van goedkeuring', + 'explore.badge.processing' => 'Wordt verwerkt', + 'explore.badge.declined' => 'Afgewezen', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Aanvraag mislukt', + 'explore.badge.requested4k' => '4K aangevraagd', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} seizoenen', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Afl. ${episode} over ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Volgende over ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} afl.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/afl.', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} op de lijst', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} vandaag bekeken', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} deze week bekeken', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} deze maand bekeken', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} dit jaar bekeken', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} kijkers', + 'explore.stats.planning' => ({required Object n}) => '${n} van plan om te kijken', + 'explore.stats.favorited' => ({required Object n}) => '${n} favorieten', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} is ermee gestopt', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: '${n} reactie', other: '${n} reacties', ), + 'explore.stats.votes' => ({required Object n}) => '${n} stemmen', + 'explore.stats.watching' => ({required Object n}) => '${n} kijken ernaar', + 'explore.stats.completed' => ({required Object n}) => '${n} afgerond', + 'explore.stats.onHold' => ({required Object n}) => '${n} op pauze', + 'explore.stats.dropped' => ({required Object n}) => '${n} gestopt', + 'explore.season.winter' => 'Winter', + 'explore.season.spring' => 'Lente', + 'explore.season.summer' => 'Zomer', + 'explore.season.fall' => 'Herfst', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'Korte tv-serie', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Special', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Muziek', + 'explore.format.other' => 'Anders', + 'explore.sourceMaterial.original' => 'Origineel', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Game', + 'explore.sourceMaterial.webComic' => 'Webcomic', + 'explore.sourceMaterial.musicRelease' => 'Muziek', + 'explore.sourceMaterial.otherMedia' => 'Anders', + 'explore.creditRole.director' => 'Regisseur', + 'explore.creditRole.writer' => 'Schrijver', + 'explore.creditRole.producer' => 'Producent', + 'explore.creditRole.creator' => 'Maker', + 'explore.creditRole.composer' => 'Componist', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Sequel', + 'explore.relation.sideStory' => 'Side story', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternatieve versie', + 'explore.relation.summary' => 'Samenvatting', + 'explore.relation.parentStory' => 'Hoofdverhaal', + 'explore.relation.adaptation' => 'Adaptatie', + 'explore.relation.other' => 'Gerelateerd', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Wordt uitgezonden op ${day} om ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Wordt uitgezonden op ${day} om ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Originele titel', + 'explore.detail.alsoKnownAs' => 'Ook bekend als', + 'explore.detail.studios' => 'Studio\'s', + 'explore.detail.country' => 'Land', + 'explore.detail.language' => 'Taal', + 'explore.detail.released' => 'Uitgebracht', + 'explore.detail.physicalRelease' => 'Op schijf', + 'explore.detail.ended' => 'Beëindigd', + 'explore.detail.addedOn' => ({required Object date}) => 'Toegevoegd op ${date}', + 'explore.detail.yourRating' => 'Jouw beoordeling', + 'explore.detail.budget' => 'Budget', + 'explore.detail.revenue' => 'Box office', + 'explore.detail.contentAdvisory' => 'Leeftijdsadvies', + 'explore.detail.tags' => 'Tags', + 'explore.detail.revealSpoilerTags' => 'Spoilertags tonen', + 'explore.detail.links' => 'Links', + 'explore.detail.watchOn' => 'Bekijk op', + 'explore.detail.watchTrailer' => 'Trailer bekijken', + 'explore.detail.openOn' => ({required Object site}) => 'Openen op ${site}', + 'explore.detail.crew' => 'Crew', + 'explore.detail.ratings' => 'Beoordelingen', + 'explore.detail.schedule' => 'Uitzendschema', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: 'Aanbevolen door ${n} gebruiker', other: 'Aanbevolen door ${n} gebruikers', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Aanbevolen door ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Favoriet bij ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} nog niet uitgezonden', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Aanbevolen door ${percent} van de kijkers', + 'explore.detail.relatedTitles' => 'Gerelateerde titels', + 'explore.detail.background' => 'Achtergrond', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: '${n} resultaat', other: '${n} resultaten', ), 'liveTv.title' => 'Live-tv', 'liveTv.guide' => 'Gids', 'liveTv.noChannels' => 'Geen zenders beschikbaar', @@ -3214,8 +3894,6 @@ extension on TranslationsNl { 'watchTogether.relayUnreachable' => 'De relayserver is onbereikbaar. Een blokkering door je internetprovider kan Samen kijken verhinderen.', 'watchTogether.reconnectingToHost' => 'Opnieuw verbinden met host...', 'watchTogether.currentPlayback' => 'Wat nu wordt afgespeeld', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Deelnemen aan huidige weergave', 'watchTogether.joinCurrentPlaybackDescription' => 'Ga terug naar wat de host nu kijkt', 'watchTogether.failedToOpenCurrentPlayback' => 'Wat nu wordt afgespeeld kon niet worden geopend', @@ -3284,9 +3962,15 @@ extension on TranslationsNl { 'downloads.editSyncRule' => 'Synchronisatieregel bewerken', 'downloads.removeSyncRule' => 'Synchronisatieregel verwijderen', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Synchronisatie van "${title}" stoppen? Gedownloade afleveringen worden behouden.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Stoppen met synchroniseren van "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Gekoppelde downloads ook verwijderen', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Downloads die door een andere synchronisatieregel of een ander profiel worden gebruikt, blijven behouden.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Synchronisatieregel aangemaakt — ${count} onbekeken afleveringen behouden', 'downloads.syncRuleUpdated' => 'Synchronisatieregel bijgewerkt', 'downloads.syncRuleRemoved' => 'Synchronisatieregel verwijderd', + 'downloads.syncRuleAndDownloadsRemoved' => 'Synchronisatieregel en gekoppelde downloads verwijderd', + 'downloads.syncRuleCleanupBusy' => 'Synchronisatieregels worden momenteel bijgewerkt. Probeer het over een moment opnieuw.', + 'downloads.syncRuleCleanupUnavailable' => 'Gekoppelde downloads konden niet veilig worden geïdentificeerd. Maak opnieuw verbinding met de server en probeer het opnieuw, of verwijder de regel zonder de downloads te verwijderen.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} nieuwe afleveringen gesynchroniseerd voor ${title}', 'downloads.activeSyncRules' => 'Synchronisatieregels', 'downloads.noSyncRules' => 'Geen synchronisatieregels', @@ -3449,6 +4133,8 @@ extension on TranslationsNl { 'performanceOverlay.dvRpus' => 'DV RPU’s', 'performanceOverlay.dvRpuAverage' => 'DV RPU gem.', 'performanceOverlay.dvSampleAverage' => 'DV-sample gem.', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Max luma', 'performanceOverlay.minLuma' => 'Min luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsNl { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Plezy activeren op ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Ga naar ${url} en voer deze code in:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Open ${service} om te activeren', @@ -3641,9 +4328,12 @@ extension on TranslationsNl { 'services.libraryFilter.modeHintWhitelist' => 'Synchroniseer alleen de hieronder aangevinkte bibliotheken.', 'services.libraryFilter.libraries' => 'Bibliotheken', 'services.libraryFilter.noLibraries' => 'Geen bibliotheken beschikbaar', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product}-server toevoegen', 'addServer.serverUrls' => 'Server-URL\'s', 'addServer.serverUrlsHelper' => 'Meerdere URL\'s toegestaan, gescheiden door komma\'s.', 'addServer.findServer' => 'Server zoeken', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Zoeken naar lokale ${product}-servers...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Lokale ${product}-servers', 'addServer.username' => 'Gebruikersnaam', 'addServer.password' => 'Wachtwoord', 'addServer.signIn' => 'Inloggen', @@ -3655,11 +4345,15 @@ extension on TranslationsNl { 'addServer.addPlexTitle' => 'Inloggen met Plex', 'addServer.pinExpired' => 'De pincode verliep voordat je kon inloggen. Probeer het opnieuw.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Account registreren mislukt: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Voer de URL van je ${product}-server in', 'addServer.addConnectionTitle' => 'Verbinding toevoegen', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Toevoegen aan ${name}', 'addServer.signInWithPlexCard' => 'Inloggen met Plex', 'addServer.signInWithPlexCardSubtitle' => 'Autoriseer dit apparaat. Gedeelde servers worden toegevoegd.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Autoriseer een Plex-account. Home-gebruikers worden profielen.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Verbinding maken met ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Voer je server-URL, gebruikersnaam en wachtwoord in.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Meld je aan bij je ${product}-server. Wordt gekoppeld aan ${name}.', 'addServer.borrowFromAnotherProfile' => 'Van een ander profiel lenen', 'addServer.borrowFromAnotherProfileSubtitle' => 'Hergebruik de verbinding van een ander profiel. Voor profielen met pincodebeveiliging is een pincode vereist.', _ => null, diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index 87ff6efc..3e54981e 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -67,6 +67,7 @@ class TranslationsPl extends Translations with BaseTranslations 'Oczekiwanie na uwierzytelnienie...\nZaloguj się w przeglądarce.'; @override String get useBrowser => 'Użyj przeglądarki'; @override String get or => 'lub'; + @override String connectToMediaBrowser({required Object product}) => 'Połącz z ${product}'; @override String get useQuickConnect => 'Użyj Quick Connect'; @override String get quickConnectInstructions => 'Otwórz Quick Connect w Jellyfin i wpisz ten kod.'; @override String get quickConnectWaiting => 'Oczekiwanie na zatwierdzenie…'; @@ -156,7 +158,7 @@ class _Translations$common$pl extends Translations$common$en { @override String get resume => 'Wznów'; @override String get error => 'Błąd'; @override String get search => 'Szukaj'; - @override String get home => 'Strona główna'; + @override String get home => 'Start'; @override String get back => 'Wstecz'; @override String get settings => 'Ustawienia'; @override String get mute => 'Wycisz'; @@ -175,6 +177,7 @@ class _Translations$common$pl extends Translations$common$en { @override String get fullscreen => 'Pełny ekran'; @override String get exitFullscreen => 'Wyjdź z pełnego ekranu'; @override String get pressBackAgainToExit => 'Naciśnij ponownie przycisk Wstecz, aby wyjść'; + @override late final _Translations$common$ratingSource$pl ratingSource = _Translations$common$ratingSource$pl._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$pl extends Translations$settings$en { @override String get darkTheme => 'Ciemny'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Gęstość biblioteki'; + @override String get displayScale => 'Skalowanie'; @override String get compact => 'Kompaktowy'; @override String get comfortable => 'Wygodny'; @override String get tvCornerSpotlightBackdrop => 'Tło wyróżnionej pozycji w rogu'; @@ -287,6 +291,11 @@ class _Translations$settings$pl extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => 'Automatyczny (zalecany)'; @override String bufferSizeWarning({required Object heap, required Object size}) => 'Dostępna pamięć: ${heap}MB. Bufor ${size}MB może wpłynąć na odtwarzanie.'; + @override String get playbackBuffer => 'Bufor odtwarzania'; + @override String get playbackBufferAuto => 'Auto (zalecane)'; + @override String get playbackBufferLarge => 'Duży'; + @override String get playbackBufferExtraLarge => 'Bardzo duży'; + @override String get playbackBufferDescription => 'Buforuje więcej w przypadku niestabilnych połączeń. Ograniczony również przez rozmiar bufora.'; @override String get defaultQualityTitle => 'Domyślna jakość'; @override String get musicQualityTitle => 'Jakość muzyki'; @override String get subtitleStyling => 'Styl napisów'; @@ -320,6 +329,9 @@ class _Translations$settings$pl extends Translations$settings$en { @override String get debugLoggingDescription => 'Włącz szczegółowe rejestrowanie, aby ułatwić rozwiązywanie problemów'; @override String get viewLogs => 'Pokaż logi'; @override String get viewLogsDescription => 'Pokaż logi aplikacji'; + @override String get clearImageCache => 'Wyczyść pamięć podręczną obrazów'; + @override String get clearImageCacheDescription => 'Wyczyść zapisane okładki i miniatury. Obrazy mogą ładować się wolniej, dopóki nie zostaną pobrane ponownie.'; + @override String get clearImageCacheSuccess => 'Pamięć podręczna obrazów została wyczyszczona'; @override String get resetSettings => 'Zresetuj ustawienia'; @override String get resetSettingsDescription => 'Przywróć ustawienia domyślne. Tego nie można cofnąć.'; @override String get resetSettingsSuccess => 'Przywrócono ustawienia domyślne'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$pl extends Translations$fileInfo$en { // Translations @override String get title => 'Informacje o pliku'; + @override String get overview => 'Przegląd'; @override String get video => 'Wideo'; @override String get audio => 'Audio'; @override String get subtitles => 'Napisy'; + @override String get images => 'Obrazy osadzone'; + @override String get dataStreams => 'Strumienie danych'; + @override String get lyrics => 'Teksty'; @override String get file => 'Plik'; + @override String get attachments => 'Załączniki'; + @override String get delivery => 'Dostarczanie'; + @override String versionCounter({required Object index, required Object count}) => 'Wersja ${index} z ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Plik ${index} z ${count}'; + @override String get noStreams => 'Serwer nie zgłosił żadnych strumieni dla tego pliku.'; + @override String get copyPath => 'Kopiuj ścieżkę'; + @override String get pathCopied => 'Skopiowano ścieżkę pliku'; @override String get codec => 'Kodek'; + @override String get codecTag => 'Tag kodeka'; @override String get resolution => 'Rozdzielczość'; + @override String get codedResolution => 'Rozdzielczość kodowania'; @override String get bitrate => 'Przepływność'; @override String get frameRate => 'Klatki na sekundę'; + @override String get rotation => 'Rotacja'; + @override String get comment => 'Komentarz'; + @override String get audioDescription => 'Audiodeskrypcja'; + @override String get headerCompression => 'Kompresja nagłówka'; + @override String get sidecarFile => 'Plik towarzyszący'; + @override String get transportTimestamp => 'Znacznik czasu transportu'; + @override String get displayOffset => 'Przesunięcie wyświetlania'; + @override String get previewFailureCode => 'Kod błędu podglądu'; + @override String get previewRetries => 'Ponowne próby podglądu'; @override String get aspectRatio => 'Proporcje'; + @override String get pixelAspectRatio => 'Współczynnik proporcji pikseli'; @override String get profile => 'Profil'; + @override String get level => 'Poziom'; @override String get bitDepth => 'Głębia bitowa'; + @override String get pixelFormat => 'Format pikseli'; @override String get colorSpace => 'Przestrzeń kolorów'; @override String get colorRange => 'Zakres kolorów'; @override String get colorPrimaries => 'Kolory podstawowe'; + @override String get colorTransfer => 'Przenoszenie kolorów'; @override String get chromaSubsampling => 'Podpróbkowanie chrominancji'; + @override String get chromaLocation => 'Położenie chrominancji'; + @override String get scanType => 'Typ skanowania'; + @override String get interlaced => 'Z przeplotem'; + @override String get anamorphic => 'Anamorficzny'; + @override String get referenceFrames => 'Klatki referencyjne'; + @override String get dynamicRange => 'Zakres dynamiczny'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Poziom Dolby Vision'; + @override String get dolbyVisionVersion => 'Wersja Dolby Vision'; + @override String get dolbyVisionLayers => 'Warstwy Dolby Vision'; + @override String get baseLayerCompatibility => 'Zgodność warstwy bazowej'; + @override String get avcBitstream => 'Strumień bitowy AVC'; + @override String get nalLengthSize => 'Rozmiar długości NAL'; + @override String get scalingMatrix => 'Własna macierz skalowania'; + @override String get streamIdentifier => 'Identyfikator strumienia'; + @override String get streamIndex => 'Indeks strumienia'; + @override String get streamId => 'ID strumienia'; + @override String get language => 'Język'; + @override String get languageCode => 'Kod języka'; + @override String get streamTitle => 'Tytuł ścieżki'; @override String get channels => 'Kanały'; + @override String get sampleRate => 'Częstotliwość próbkowania'; + @override String get spatialAudio => 'Dźwięk przestrzenny'; + @override String get textBased => 'Tekstowy'; + @override String get subtitleFormat => 'Format pliku towarzyszącego'; + @override String get provider => 'Dostawca'; + @override String get matchScore => 'Wynik dopasowania'; + @override String get externalDelivery => 'Może być dostarczany osobno'; + @override String get sidecarPath => 'Ścieżka pliku towarzyszącego'; + @override String get sourceStream => 'Skopiowano z'; + @override String get temporary => 'Tymczasowy'; + @override String get timeBase => 'Baza czasu'; @override String get overallBitrate => 'Całkowita przepływność'; @override String get path => 'Ścieżka'; + @override String get fileName => 'Nazwa pliku'; @override String get size => 'Rozmiar'; + @override String get totalSize => 'Całkowity rozmiar'; @override String get container => 'Kontener'; @override String get duration => 'Czas trwania'; + @override String get previewThumbnails => 'Miniatury podglądu'; + @override String get previewIndex => 'Indeks podglądu'; + @override String get packetLength => 'Długość pakietu'; + @override String get filePresent => 'Plik obecny'; + @override String get fileReadable => 'Czytelny dla serwera'; + @override String get streamPath => 'Ścieżka strumienia'; @override String get optimizedForStreaming => 'Zoptymalizowane do strumieniowania'; @override String get has64bitOffsets => 'Przesunięcia 64-bitowe'; + @override String get protocol => 'Protokół'; + @override String get mediaType => 'Typ multimediów'; + @override String get sourceKind => 'Rodzaj źródła'; + @override String get optimizedVersion => 'Zoptymalizowana wersja'; + @override String get optimizationTarget => 'Cel optymalizacji'; + @override String get deletedAt => 'Usunięto'; + @override String get remoteSource => 'Źródło zdalne'; + @override String get infiniteStream => 'Nieskończony strumień'; + @override String get directPlay => 'Odtwarzanie bezpośrednie'; + @override String get directStream => 'Bezpośrednie strumieniowanie'; + @override String get transcoding => 'Transkodowanie'; + @override String get etag => 'ETag'; + @override String get versionId => 'ID wersji'; + @override String get fileId => 'ID pliku'; + @override String get defaultAudioTrack => 'Domyślna ścieżka audio'; + @override String get defaultSubtitleTrack => 'Domyślna ścieżka napisów'; + @override String get subtitlesOff => 'Wył.'; + @override String get flagDefault => 'Domyślna'; + @override String get flagForced => 'Wymuszone'; + @override String get flagSelected => 'Wybrana'; + @override String get flagExternal => 'Zewnętrzne'; + @override String get flagHearingImpaired => 'Dla niesłyszących'; + @override String get flagDub => 'Dubbing'; + @override String get flagOriginal => 'Oryginalna'; } // Path: mediaMenu @@ -546,7 +647,41 @@ class _Translations$mediaMenu$pl extends Translations$mediaMenu$en { @override String get shufflePlay => 'Odtwarzanie losowe'; @override String get shuffleNotAvailableOffline => 'Odtwarzanie losowe nie jest dostępne offline'; @override String get fileInfo => 'Informacje o pliku'; + @override String get deleteEpisodeFromServer => 'Usuń odcinek z serwera'; + @override String get deleteSeasonFromServer => 'Usuń sezon z serwera'; + @override String get deleteShowFromServer => 'Usuń serial z serwera'; + @override String get deleteMovieFromServer => 'Usuń film z serwera'; + @override String get deleteEpisodeTitle => 'Usunąć ten odcinek?'; + @override String get deleteSeasonTitle => 'Usunąć ten sezon?'; + @override String get deleteShowTitle => 'Usunąć ten serial?'; + @override String get deleteMovieTitle => 'Usunąć ten film?'; + @override String get deleteEpisodeConfirm => 'Usuń odcinek'; + @override String get deleteSeasonConfirm => 'Usuń sezon'; + @override String get deleteShowConfirm => 'Usuń serial'; + @override String get deleteMovieConfirm => 'Usuń film'; + @override String get deleteAnyway => 'Usuń mimo to'; + @override String confirmDeleteTarget({required Object title}) => 'Trwale usunąć ${title} z Twojego serwera?'; @override String get deleteMultipleWarning => 'Obejmuje to wszystkie odcinki i ich pliki.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: 'Usunięty zostanie ${n} odcinek w nim oraz jego plik.', + few: 'Usunięte zostaną ${n} odcinki w nim oraz ich pliki.', + many: 'Usuniętych zostanie ${n} odcinków w nim oraz ich pliki.', + other: 'Usuniętych zostanie ${n} odcinka w nim oraz ich pliki.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: 'Ten element jest przechowywany jako ${n} plik, który zostanie usunięty.', + few: 'Ten element jest przechowywany w ${n} plikach, które wszystkie zostaną usunięte.', + many: 'Ten element jest przechowywany w ${n} plikach, które wszystkie zostaną usunięte.', + other: 'Ten element jest przechowywany w ${n} pliku, który zostanie usunięty.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: 'W tym samym pliku przechowywany jest jeszcze ${n} inny odcinek, który również zostanie usunięty:', + few: 'W tym samym pliku przechowywane są jeszcze ${n} inne odcinki, które również zostaną usunięte:', + many: 'W tym samym pliku przechowywanych jest jeszcze ${n} innych odcinków, które również zostaną usunięte:', + other: 'W tym samym pliku przechowywany jest jeszcze ${n} innego odcinka, który również zostanie usunięty:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy nie mogło sprawdzić, które pliki zostaną usunięte, więc może usunąć więcej niż element wymieniony powyżej. Anuluj i spróbuj ponownie albo usuń mimo to.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Twój serwer nie podał informacji o plikach tego elementu, więc Plezy nie może sprawdzić, które pliki zostaną usunięte. Może usunąć więcej niż element wymieniony powyżej.'; @override String get mediaDeletedSuccessfully => 'Usunięto element multimedialny'; @override String get mediaFailedToDelete => 'Nie udało się usunąć elementu multimedialnego'; @override String get rate => 'Oceń'; @@ -657,6 +792,9 @@ class _Translations$videoControls$pl extends Translations$videoControls$en { @override String get playNext => 'Odtwórz następny'; @override String get playButton => 'Odtwórz'; @override String get pauseButton => 'Pauza'; + @override String get playbackPaused => 'Wstrzymano'; + @override String get playbackResumed => 'Odtwarzanie'; + @override String get loadingVideo => 'Ładowanie wideo'; @override String get showPlaybackControls => 'Pokaż elementy sterujące odtwarzaniem'; @override String get hidePlaybackControls => 'Ukryj elementy sterujące odtwarzaniem'; @override String seekBackwardButton({required Object seconds}) => 'Przewiń do tyłu o ${seconds} sekund'; @@ -728,6 +866,7 @@ class _Translations$messages$pl extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Usunięto z kontynuowania oglądania'; @override String errorLoading({required Object error}) => 'Błąd: ${error}'; + @override String get searchPartialResults => 'Niektórych serwerów multimediów nie udało się przeszukać. Wyświetlane są dostępne wyniki.'; @override String get streamInterrupted => 'Strumień został przerwany. Naciśnij odtwarzanie lub przewiń, aby spróbować ponownie.'; @override String get liveStreamInterrupted => 'Transmisja na żywo została przerwana. Naciśnij odtwarzanie, aby spróbować ponownie.'; @override String get fileInfoNotAvailable => 'Informacje o pliku niedostępne'; @@ -766,6 +905,8 @@ class _Translations$messages$pl extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Przełączanie na kompatybilny odtwarzacz...'; @override String get serverLimitTitle => 'Odtwarzanie nie powiodło się'; @override String get serverLimitBody => 'Błąd serwera (HTTP 500). Limit przepustowości/transkodowania prawdopodobnie odrzucił tę sesję. Poproś właściciela o zmianę.'; + @override String get mediaUnreadableTitle => 'Plik niedostępny'; + @override String get mediaUnreadableBody => 'Serwer znalazł ten element, ale nie mógł odczytać jego pliku (HTTP 404). Plik został prawdopodobnie przeniesiony, usunięty albo jego pamięć masowa jest niedostępna. Poproś właściciela serwera o sprawdzenie pliku i ponowne przeskanowanie biblioteki.'; @override String get logsUploaded => 'Logi przesłane'; @override String get logsUploadFailed => 'Nie udało się przesłać logów'; @override String get logId => 'ID logu'; @@ -919,6 +1060,8 @@ class _Translations$connections$pl extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sesja wygasła dla ${name}'; @override String sessionExpiredMany({required Object count}) => 'Sesja wygasła dla ${count} serwerów'; @override String get signInAgain => 'Zaloguj się ponownie'; + @override String editMediaBrowserTitle({required Object product}) => 'Edytuj połączenie z ${product}'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Dodaj lub usuń adresy URL dla ${serverName}. Plezy będzie używać osiągalnego adresu URL o najniższym opóźnieniu.'; } // Path: discover @@ -962,6 +1105,7 @@ class _Translations$errors$pl extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Wyszukiwanie nie powiodło się: ${error}'; + @override String get searchUnavailable => 'Wyszukiwanie nie mogło połączyć się z żadnym serwerem multimediów.'; @override String connectionTimeout({required Object context}) => 'Limit czasu połączenia przy ładowaniu ${context}'; @override String get connectionFailed => 'Nie można połączyć się z serwerem multimediów'; @override String unableToLoad({required Object context}) => 'Nie udało się załadować ${context}. Spróbuj ponownie.'; @@ -1079,6 +1223,45 @@ class _Translations$logs$pl extends Translations$logs$en { @override String get uploadLogs => 'Prześlij logi'; } +// Path: startup +class _Translations$startup$pl extends Translations$startup$en { + _Translations$startup$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Nie udało się uruchomić Plezy'; + @override String get failedBody => 'Coś poszło nie tak podczas uruchamiania. Poniższe szczegóły wskazują, co zawiodło.'; + @override String get failedBodyRepairable => 'Zapisany plik ustawień Plezy jest uszkodzony i musi zostać odbudowany, zanim Plezy będzie mogło się uruchomić. Ponawianie nie pomoże — wybierz Napraw pamięć.'; + @override String get phaseLabel => 'Krok'; + @override String get showDetails => 'Pokaż szczegóły'; + @override String get hideDetails => 'Ukryj szczegóły'; + @override String get copyDetails => 'Kopiuj szczegóły'; + @override String get detailsCopied => 'Skopiowano szczegóły do schowka'; + @override String get uploadDetails => 'Prześlij szczegóły'; + @override String get repairStorage => 'Napraw pamięć'; + @override String get repairTitle => 'Naprawić zapisane dane?'; + @override String get repairBodyCommon => 'Plik ustawień Plezy jest uszkodzony i nie można go odczytać. Naprawa przywraca wszystkie ustawienia do wartości domyślnych.'; + @override String get repairBodyOneCredential => 'Jedno zapisane logowanie jest uszkodzone i nie można go odczytać. Naprawa usunie tylko je; pozostałe ustawienia pozostaną nietknięte.'; + @override String get repairBodySignInsKept => 'Twoje serwery i profile powinny pozostać zalogowane.'; + @override String get repairBodySignInsLost => 'Klucza chroniącego zapisane logowania nie można odzyskać z tego pliku, więc będziesz musiał zalogować się ponownie na każdym serwerze i profilu. Nic na Twoim serwerze multimediów nie zostanie zmienione.'; + @override String get repairBodySessionsUncertain => 'Usługi śledzenia (MAL, AniList, Simkl, Trakt) i Seerr są przechowywane osobno i mogą, ale nie muszą przetrwać. Plezy dokładnie poinformuje Cię, co zachowało.'; + @override String get repairConfirm => 'Napraw'; + @override String get repairSucceeded => 'Naprawiono pamięć'; + @override String get repairNeedsRestart => 'Naprawiono pamięć — wymagany restart'; + @override String get restartRequiredBody => 'Twoje dane zostały naprawione, ale Plezy musi uruchomić się od nowa, zanim będzie mogło z nich korzystać. Zamknij Plezy i otwórz je ponownie.'; + @override String get quitPlezy => 'Zamknij Plezy'; + @override String get repairFailed => 'Naprawa nie powiodła się'; + @override String get repairKeptSignIns => 'Twoje serwery i profile są nadal zalogowane.'; + @override String get repairLostSignIns => 'Nie udało się odzyskać klucza chroniącego zapisane logowania. Musisz zalogować się ponownie na każdym serwerze i profilu.'; + @override String get repairLostSessions => 'Utracono co najmniej jedno połączenie z usługą śledzenia lub Seerr i trzeba je ponownie połączyć.'; + @override String get backupTitle => 'Zachowano kopię uszkodzonego pliku'; + @override String get backupWarning => 'Zawiera Twoje dane logowania. Nie przesyłaj ani nie udostępniaj jej.'; + @override String get deleteBackup => 'Usuń kopię'; + @override String get backupDeleted => 'Usunięto kopię.'; + @override String get previousFailureTitle => 'Ostatnim razem nie udało się uruchomić Plezy'; +} + // Path: licenses class _Translations$licenses$pl extends Translations$licenses$en { _Translations$licenses$pl._(TranslationsPl root) : this._root = root, super.internal(root); @@ -1136,6 +1319,22 @@ class _Translations$explore$pl extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Brak wyników dla "${query}"'; @override String searchPrompt({required Object source}) => 'Szukaj filmów i seriali w ${source}.'; @override String get searchFailed => 'Wyszukiwanie nie powiodło się. Sprawdź połączenie i spróbuj ponownie.'; + @override late final _Translations$explore$badge$pl badge = _Translations$explore$badge$pl._(_root); + @override late final _Translations$explore$stats$pl stats = _Translations$explore$stats$pl._(_root); + @override late final _Translations$explore$season$pl season = _Translations$explore$season$pl._(_root); + @override late final _Translations$explore$format$pl format = _Translations$explore$format$pl._(_root); + @override late final _Translations$explore$sourceMaterial$pl sourceMaterial = _Translations$explore$sourceMaterial$pl._(_root); + @override late final _Translations$explore$creditRole$pl creditRole = _Translations$explore$creditRole$pl._(_root); + @override late final _Translations$explore$relation$pl relation = _Translations$explore$relation$pl._(_root); + @override String broadcast({required Object day, required Object time}) => 'Emisja ${day} o ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Emisja ${day} o ${time} ${timezone}'; + @override late final _Translations$explore$detail$pl detail = _Translations$explore$detail$pl._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: '${n} wynik', + few: '${n} wyniki', + many: '${n} wyników', + other: '${n} wyniku', + ); } // Path: liveTv @@ -1445,9 +1644,15 @@ class _Translations$downloads$pl extends Translations$downloads$en { @override String get editSyncRule => 'Edytuj regułę synchronizacji'; @override String get removeSyncRule => 'Usuń regułę synchronizacji'; @override String removeSyncRuleConfirm({required Object title}) => 'Zatrzymać synchronizację "${title}"? Pobrane odcinki zostaną zachowane.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Zatrzymać synchronizację "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Usuń również powiązane pobrania'; + @override String get deleteSyncRuleDownloadsDescription => 'Pobrania używane przez inną regułę synchronizacji lub profil zostaną zachowane.'; @override String syncRuleCreated({required Object count}) => 'Reguła synchronizacji utworzona — zachowywanie ${count} nieobejrzanych odcinków'; @override String get syncRuleUpdated => 'Reguła synchronizacji zaktualizowana'; @override String get syncRuleRemoved => 'Reguła synchronizacji usunięta'; + @override String get syncRuleAndDownloadsRemoved => 'Usunięto regułę synchronizacji i powiązane pobrania'; + @override String get syncRuleCleanupBusy => 'Reguły synchronizacji są aktualnie aktualizowane. Spróbuj ponownie za chwilę.'; + @override String get syncRuleCleanupUnavailable => 'Nie udało się bezpiecznie zidentyfikować powiązanych pobrań. Połącz się ponownie z serwerem i spróbuj ponownie albo usuń regułę bez usuwania pobrań.'; @override String syncedNewEpisodes({required Object count, required Object title}) => 'Zsynchronizowano ${count} nowych odcinków dla ${title}'; @override String get activeSyncRules => 'Reguły synchronizacji'; @override String get noSyncRules => 'Brak reguł synchronizacji'; @@ -1805,9 +2010,12 @@ class _Translations$addServer$pl extends Translations$addServer$en { final TranslationsPl _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Dodaj serwer ${product}'; @override String get serverUrls => 'Adresy URL serwera'; @override String get serverUrlsHelper => 'Można podać wiele adresów URL rozdzielonych przecinkami.'; @override String get findServer => 'Znajdź serwer'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Szukanie lokalnych serwerów ${product}...'; + @override String localMediaBrowserServers({required Object product}) => 'Lokalne serwery ${product}'; @override String get username => 'Nazwa użytkownika'; @override String get password => 'Hasło'; @override String get signIn => 'Zaloguj się'; @@ -1819,15 +2027,39 @@ class _Translations$addServer$pl extends Translations$addServer$en { @override String get addPlexTitle => 'Zaloguj się przez Plex'; @override String get pinExpired => 'PIN wygasł przed zalogowaniem. Spróbuj ponownie.'; @override String failedToRegisterAccount({required Object error}) => 'Nie udało się zarejestrować konta: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Podaj adres URL serwera ${product}'; @override String get addConnectionTitle => 'Dodaj połączenie'; @override String addConnectionTitleScoped({required Object name}) => 'Dodaj do ${name}'; @override String get signInWithPlexCard => 'Zaloguj się przez Plex'; @override String get signInWithPlexCardSubtitle => 'Autoryzuj to urządzenie. Serwery udostępnione zostaną dodane.'; @override String get signInWithPlexCardSubtitleScoped => 'Autoryzuj konto Plex. Użytkownicy Home staną się profilami.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Połącz z ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Podaj adres URL serwera, nazwę użytkownika i hasło.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Zaloguj się do serwera ${product}. Powiązane z ${name}.'; @override String get borrowFromAnotherProfile => 'Pożycz z innego profilu'; @override String get borrowFromAnotherProfileSubtitle => 'Użyj połączenia innego profilu. Profile chronione PIN-em wymagają podania PIN-u.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$pl extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get critic => 'Krytycy'; + @override String get audience => 'Widzowie'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Krytycy Rotten Tomatoes'; + @override String get rottenTomatoesAudience => 'Widzowie Rotten Tomatoes'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$pl extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$pl._(TranslationsPl root) : this._root = root, super.internal(root); @@ -1991,6 +2223,190 @@ class _Translations$explore$status$pl extends Translations$explore$status$en { @override String get upcoming => 'Nadchodzący'; } +// Path: explore.badge +class _Translations$explore$badge$pl extends Translations$explore$badge$en { + _Translations$explore$badge$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} popularne'; + @override String rankAiring({required Object n}) => '#${n} emitowane'; + @override String rankRated({required Object n}) => '#${n} najwyżej oceniane'; + @override String rankFavorited({required Object n}) => '#${n} w ulubionych'; + @override String rankTrending({required Object n}) => '#${n} na czasie'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} w sezonie ${season}'; + @override String watchingNow({required Object n}) => '${n} ogląda teraz'; + @override String get available => 'Dostępne'; + @override String get partiallyAvailable => 'Częściowo dostępne'; + @override String get availableIn4k => 'Dostępne w 4K'; + @override String get requested => 'Zamówiono'; + @override String get pendingApproval => 'Oczekuje na zatwierdzenie'; + @override String get processing => 'Przetwarzanie'; + @override String get declined => 'Odrzucono'; + @override String get requestFailed => 'Żądanie nie powiodło się'; + @override String get requested4k => 'Zamówiono w 4K'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} sezonów'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Odc. ${episode} za ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Następny za ${duration}'; + @override String episodesShort({required Object n}) => '${n} odc.'; + @override String minutesPerEpisode({required Object n}) => '${n} min/odc.'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$pl extends Translations$explore$stats$en { + _Translations$explore$stats$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} na listach'; + @override String viewersDay({required Object n}) => '${n} obejrzało dziś'; + @override String viewersWeek({required Object n}) => '${n} obejrzało w tym tygodniu'; + @override String viewersMonth({required Object n}) => '${n} obejrzało w tym miesiącu'; + @override String viewersYear({required Object n}) => '${n} obejrzało w tym roku'; + @override String viewersAllTime({required Object n}) => '${n} widzów'; + @override String planning({required Object n}) => '${n} planuje obejrzeć'; + @override String favorited({required Object n}) => '${n} w ulubionych'; + @override String dropRate({required Object percent}) => '${percent} porzuciło'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: '${n} komentarz', + few: '${n} komentarze', + many: '${n} komentarzy', + other: '${n} komentarza', + ); + @override String votes({required Object n}) => '${n} głosów'; + @override String watching({required Object n}) => '${n} ogląda'; + @override String completed({required Object n}) => '${n} ukończyło'; + @override String onHold({required Object n}) => '${n} wstrzymało'; + @override String dropped({required Object n}) => '${n} porzuciło'; +} + +// Path: explore.season +class _Translations$explore$season$pl extends Translations$explore$season$en { + _Translations$explore$season$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get winter => 'Zima'; + @override String get spring => 'Wiosna'; + @override String get summer => 'Lato'; + @override String get fall => 'Jesień'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$pl extends Translations$explore$format$en { + _Translations$explore$format$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV Short'; + @override String get movie => 'Film'; + @override String get special => 'Odcinek specjalny'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Muzyka'; + @override String get other => 'Inne'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$pl extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get original => 'Oryginał'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Powieść'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Gra'; + @override String get webComic => 'Komiks internetowy'; + @override String get musicRelease => 'Muzyka'; + @override String get otherMedia => 'Inne'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$pl extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get director => 'Reżyser'; + @override String get writer => 'Scenarzysta'; + @override String get producer => 'Producent'; + @override String get creator => 'Twórca'; + @override String get composer => 'Kompozytor'; +} + +// Path: explore.relation +class _Translations$explore$relation$pl extends Translations$explore$relation$en { + _Translations$explore$relation$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Sequel'; + @override String get sideStory => 'Poboczna historia'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Wersja alternatywna'; + @override String get summary => 'Streszczenie'; + @override String get parentStory => 'Historia pierwotna'; + @override String get adaptation => 'Adaptacja'; + @override String get other => 'Powiązane'; +} + +// Path: explore.detail +class _Translations$explore$detail$pl extends Translations$explore$detail$en { + _Translations$explore$detail$pl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Tytuł oryginalny'; + @override String get alsoKnownAs => 'Znany również jako'; + @override String get studios => 'Studia'; + @override String get country => 'Kraj'; + @override String get language => 'Język'; + @override String get released => 'Premiera'; + @override String get physicalRelease => 'Na nośniku'; + @override String get ended => 'Zakończony'; + @override String addedOn({required Object date}) => 'Dodano ${date}'; + @override String get yourRating => 'Twoja ocena'; + @override String get budget => 'Budżet'; + @override String get revenue => 'Box office'; + @override String get contentAdvisory => 'Klasyfikacja wiekowa'; + @override String get tags => 'Tagi'; + @override String get revealSpoilerTags => 'Pokaż tagi zawierające spoilery'; + @override String get links => 'Linki'; + @override String get watchOn => 'Oglądaj na'; + @override String get watchTrailer => 'Obejrzyj zwiastun'; + @override String openOn({required Object site}) => 'Otwórz na ${site}'; + @override String get crew => 'Obsada i ekipa'; + @override String get ratings => 'Oceny'; + @override String get schedule => 'Harmonogram'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: 'Polecany przez ${n} użytkownika', + few: 'Polecany przez ${n} użytkowników', + many: 'Polecany przez ${n} użytkowników', + other: 'Polecany przez ${n} użytkownika', + ); + @override String recommendedBy({required Object who}) => 'Polecany przez ${who}'; + @override String favoritedBy({required Object who}) => 'Dodany do ulubionych przez ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} jeszcze nie wyemitowano'; + @override String recommendedByPercent({required Object percent}) => 'Polecany przez ${percent} widzów'; + @override String get relatedTitles => 'Powiązane tytuły'; + @override String get background => 'Tło'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$pl extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$pl._(TranslationsPl root) : this._root = root, super.internal(root); @@ -2134,6 +2550,7 @@ class _Translations$services$names$pl extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2203,6 +2620,7 @@ extension on TranslationsPl { 'auth.waitingForAuth' => 'Oczekiwanie na uwierzytelnienie...\nZaloguj się w przeglądarce.', 'auth.useBrowser' => 'Użyj przeglądarki', 'auth.or' => 'lub', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Połącz z ${product}', 'auth.useQuickConnect' => 'Użyj Quick Connect', 'auth.quickConnectInstructions' => 'Otwórz Quick Connect w Jellyfin i wpisz ten kod.', 'auth.quickConnectWaiting' => 'Oczekiwanie na zatwierdzenie…', @@ -2235,7 +2653,7 @@ extension on TranslationsPl { 'common.resume' => 'Wznów', 'common.error' => 'Błąd', 'common.search' => 'Szukaj', - 'common.home' => 'Strona główna', + 'common.home' => 'Start', 'common.back' => 'Wstecz', 'common.settings' => 'Ustawienia', 'common.mute' => 'Wycisz', @@ -2254,6 +2672,17 @@ extension on TranslationsPl { 'common.fullscreen' => 'Pełny ekran', 'common.exitFullscreen' => 'Wyjdź z pełnego ekranu', 'common.pressBackAgainToExit' => 'Naciśnij ponownie przycisk Wstecz, aby wyjść', + 'common.ratingSource.critic' => 'Krytycy', + 'common.ratingSource.audience' => 'Widzowie', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Krytycy Rotten Tomatoes', + 'common.ratingSource.rottenTomatoesAudience' => 'Widzowie Rotten Tomatoes', 'screens.licenses' => 'Licencje', 'screens.switchProfile' => 'Zmień profil', 'screens.subtitleStyling' => 'Styl napisów', @@ -2290,6 +2719,7 @@ extension on TranslationsPl { 'settings.darkTheme' => 'Ciemny', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Gęstość biblioteki', + 'settings.displayScale' => 'Skalowanie', 'settings.compact' => 'Kompaktowy', 'settings.comfortable' => 'Wygodny', 'settings.tvCornerSpotlightBackdrop' => 'Tło wyróżnionej pozycji w rogu', @@ -2339,6 +2769,11 @@ extension on TranslationsPl { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => 'Automatyczny (zalecany)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => 'Dostępna pamięć: ${heap}MB. Bufor ${size}MB może wpłynąć na odtwarzanie.', + 'settings.playbackBuffer' => 'Bufor odtwarzania', + 'settings.playbackBufferAuto' => 'Auto (zalecane)', + 'settings.playbackBufferLarge' => 'Duży', + 'settings.playbackBufferExtraLarge' => 'Bardzo duży', + 'settings.playbackBufferDescription' => 'Buforuje więcej w przypadku niestabilnych połączeń. Ograniczony również przez rozmiar bufora.', 'settings.defaultQualityTitle' => 'Domyślna jakość', 'settings.musicQualityTitle' => 'Jakość muzyki', 'settings.subtitleStyling' => 'Styl napisów', @@ -2372,6 +2807,9 @@ extension on TranslationsPl { 'settings.debugLoggingDescription' => 'Włącz szczegółowe rejestrowanie, aby ułatwić rozwiązywanie problemów', 'settings.viewLogs' => 'Pokaż logi', 'settings.viewLogsDescription' => 'Pokaż logi aplikacji', + 'settings.clearImageCache' => 'Wyczyść pamięć podręczną obrazów', + 'settings.clearImageCacheDescription' => 'Wyczyść zapisane okładki i miniatury. Obrazy mogą ładować się wolniej, dopóki nie zostaną pobrane ponownie.', + 'settings.clearImageCacheSuccess' => 'Pamięć podręczna obrazów została wyczyszczona', 'settings.resetSettings' => 'Zresetuj ustawienia', 'settings.resetSettingsDescription' => 'Przywróć ustawienia domyślne. Tego nie można cofnąć.', 'settings.resetSettingsSuccess' => 'Przywrócono ustawienia domyślne', @@ -2555,29 +2993,118 @@ extension on TranslationsPl { 'hotkeys.actions.skipMarker' => 'Pomiń intro/napisy końcowe', 'hotkeys.actions.screenshot' => 'Zrób zrzut ekranu', 'fileInfo.title' => 'Informacje o pliku', + 'fileInfo.overview' => 'Przegląd', 'fileInfo.video' => 'Wideo', 'fileInfo.audio' => 'Audio', 'fileInfo.subtitles' => 'Napisy', + 'fileInfo.images' => 'Obrazy osadzone', + 'fileInfo.dataStreams' => 'Strumienie danych', + 'fileInfo.lyrics' => 'Teksty', 'fileInfo.file' => 'Plik', + 'fileInfo.attachments' => 'Załączniki', + 'fileInfo.delivery' => 'Dostarczanie', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Wersja ${index} z ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Plik ${index} z ${count}', + 'fileInfo.noStreams' => 'Serwer nie zgłosił żadnych strumieni dla tego pliku.', + 'fileInfo.copyPath' => 'Kopiuj ścieżkę', + 'fileInfo.pathCopied' => 'Skopiowano ścieżkę pliku', 'fileInfo.codec' => 'Kodek', + 'fileInfo.codecTag' => 'Tag kodeka', 'fileInfo.resolution' => 'Rozdzielczość', + 'fileInfo.codedResolution' => 'Rozdzielczość kodowania', 'fileInfo.bitrate' => 'Przepływność', 'fileInfo.frameRate' => 'Klatki na sekundę', + 'fileInfo.rotation' => 'Rotacja', + 'fileInfo.comment' => 'Komentarz', + 'fileInfo.audioDescription' => 'Audiodeskrypcja', + 'fileInfo.headerCompression' => 'Kompresja nagłówka', + 'fileInfo.sidecarFile' => 'Plik towarzyszący', + 'fileInfo.transportTimestamp' => 'Znacznik czasu transportu', + 'fileInfo.displayOffset' => 'Przesunięcie wyświetlania', + 'fileInfo.previewFailureCode' => 'Kod błędu podglądu', + 'fileInfo.previewRetries' => 'Ponowne próby podglądu', 'fileInfo.aspectRatio' => 'Proporcje', + 'fileInfo.pixelAspectRatio' => 'Współczynnik proporcji pikseli', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Poziom', 'fileInfo.bitDepth' => 'Głębia bitowa', + 'fileInfo.pixelFormat' => 'Format pikseli', 'fileInfo.colorSpace' => 'Przestrzeń kolorów', 'fileInfo.colorRange' => 'Zakres kolorów', 'fileInfo.colorPrimaries' => 'Kolory podstawowe', + 'fileInfo.colorTransfer' => 'Przenoszenie kolorów', 'fileInfo.chromaSubsampling' => 'Podpróbkowanie chrominancji', + 'fileInfo.chromaLocation' => 'Położenie chrominancji', + 'fileInfo.scanType' => 'Typ skanowania', + 'fileInfo.interlaced' => 'Z przeplotem', + 'fileInfo.anamorphic' => 'Anamorficzny', + 'fileInfo.referenceFrames' => 'Klatki referencyjne', + 'fileInfo.dynamicRange' => 'Zakres dynamiczny', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Poziom Dolby Vision', + 'fileInfo.dolbyVisionVersion' => 'Wersja Dolby Vision', + 'fileInfo.dolbyVisionLayers' => 'Warstwy Dolby Vision', + 'fileInfo.baseLayerCompatibility' => 'Zgodność warstwy bazowej', + 'fileInfo.avcBitstream' => 'Strumień bitowy AVC', + 'fileInfo.nalLengthSize' => 'Rozmiar długości NAL', + 'fileInfo.scalingMatrix' => 'Własna macierz skalowania', + 'fileInfo.streamIdentifier' => 'Identyfikator strumienia', + 'fileInfo.streamIndex' => 'Indeks strumienia', + 'fileInfo.streamId' => 'ID strumienia', + 'fileInfo.language' => 'Język', + 'fileInfo.languageCode' => 'Kod języka', + 'fileInfo.streamTitle' => 'Tytuł ścieżki', 'fileInfo.channels' => 'Kanały', + 'fileInfo.sampleRate' => 'Częstotliwość próbkowania', + 'fileInfo.spatialAudio' => 'Dźwięk przestrzenny', + 'fileInfo.textBased' => 'Tekstowy', + 'fileInfo.subtitleFormat' => 'Format pliku towarzyszącego', + 'fileInfo.provider' => 'Dostawca', + 'fileInfo.matchScore' => 'Wynik dopasowania', + 'fileInfo.externalDelivery' => 'Może być dostarczany osobno', + 'fileInfo.sidecarPath' => 'Ścieżka pliku towarzyszącego', + 'fileInfo.sourceStream' => 'Skopiowano z', + 'fileInfo.temporary' => 'Tymczasowy', + 'fileInfo.timeBase' => 'Baza czasu', 'fileInfo.overallBitrate' => 'Całkowita przepływność', 'fileInfo.path' => 'Ścieżka', + 'fileInfo.fileName' => 'Nazwa pliku', 'fileInfo.size' => 'Rozmiar', + 'fileInfo.totalSize' => 'Całkowity rozmiar', 'fileInfo.container' => 'Kontener', 'fileInfo.duration' => 'Czas trwania', + 'fileInfo.previewThumbnails' => 'Miniatury podglądu', + 'fileInfo.previewIndex' => 'Indeks podglądu', + 'fileInfo.packetLength' => 'Długość pakietu', + 'fileInfo.filePresent' => 'Plik obecny', + 'fileInfo.fileReadable' => 'Czytelny dla serwera', + 'fileInfo.streamPath' => 'Ścieżka strumienia', 'fileInfo.optimizedForStreaming' => 'Zoptymalizowane do strumieniowania', 'fileInfo.has64bitOffsets' => 'Przesunięcia 64-bitowe', + 'fileInfo.protocol' => 'Protokół', + 'fileInfo.mediaType' => 'Typ multimediów', + 'fileInfo.sourceKind' => 'Rodzaj źródła', + 'fileInfo.optimizedVersion' => 'Zoptymalizowana wersja', + 'fileInfo.optimizationTarget' => 'Cel optymalizacji', + 'fileInfo.deletedAt' => 'Usunięto', + 'fileInfo.remoteSource' => 'Źródło zdalne', + 'fileInfo.infiniteStream' => 'Nieskończony strumień', + 'fileInfo.directPlay' => 'Odtwarzanie bezpośrednie', + 'fileInfo.directStream' => 'Bezpośrednie strumieniowanie', + 'fileInfo.transcoding' => 'Transkodowanie', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'ID wersji', + 'fileInfo.fileId' => 'ID pliku', + 'fileInfo.defaultAudioTrack' => 'Domyślna ścieżka audio', + 'fileInfo.defaultSubtitleTrack' => 'Domyślna ścieżka napisów', + 'fileInfo.subtitlesOff' => 'Wył.', + 'fileInfo.flagDefault' => 'Domyślna', + 'fileInfo.flagForced' => 'Wymuszone', + 'fileInfo.flagSelected' => 'Wybrana', + 'fileInfo.flagExternal' => 'Zewnętrzne', + 'fileInfo.flagHearingImpaired' => 'Dla niesłyszących', + 'fileInfo.flagDub' => 'Dubbing', + 'fileInfo.flagOriginal' => 'Oryginalna', 'mediaMenu.markAsWatched' => 'Oznacz jako obejrzane', 'mediaMenu.markAsUnwatched' => 'Oznacz jako nieobejrzane', 'mediaMenu.removeFromContinueWatching' => 'Usuń z kontynuowania oglądania', @@ -2586,7 +3113,28 @@ extension on TranslationsPl { 'mediaMenu.shufflePlay' => 'Odtwarzanie losowe', 'mediaMenu.shuffleNotAvailableOffline' => 'Odtwarzanie losowe nie jest dostępne offline', 'mediaMenu.fileInfo' => 'Informacje o pliku', + 'mediaMenu.deleteEpisodeFromServer' => 'Usuń odcinek z serwera', + 'mediaMenu.deleteSeasonFromServer' => 'Usuń sezon z serwera', + 'mediaMenu.deleteShowFromServer' => 'Usuń serial z serwera', + 'mediaMenu.deleteMovieFromServer' => 'Usuń film z serwera', + 'mediaMenu.deleteEpisodeTitle' => 'Usunąć ten odcinek?', + 'mediaMenu.deleteSeasonTitle' => 'Usunąć ten sezon?', + 'mediaMenu.deleteShowTitle' => 'Usunąć ten serial?', + 'mediaMenu.deleteMovieTitle' => 'Usunąć ten film?', + 'mediaMenu.deleteEpisodeConfirm' => 'Usuń odcinek', + 'mediaMenu.deleteSeasonConfirm' => 'Usuń sezon', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Usuń serial', + 'mediaMenu.deleteMovieConfirm' => 'Usuń film', + 'mediaMenu.deleteAnyway' => 'Usuń mimo to', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Trwale usunąć ${title} z Twojego serwera?', 'mediaMenu.deleteMultipleWarning' => 'Obejmuje to wszystkie odcinki i ich pliki.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: 'Usunięty zostanie ${n} odcinek w nim oraz jego plik.', few: 'Usunięte zostaną ${n} odcinki w nim oraz ich pliki.', many: 'Usuniętych zostanie ${n} odcinków w nim oraz ich pliki.', other: 'Usuniętych zostanie ${n} odcinka w nim oraz ich pliki.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: 'Ten element jest przechowywany jako ${n} plik, który zostanie usunięty.', few: 'Ten element jest przechowywany w ${n} plikach, które wszystkie zostaną usunięte.', many: 'Ten element jest przechowywany w ${n} plikach, które wszystkie zostaną usunięte.', other: 'Ten element jest przechowywany w ${n} pliku, który zostanie usunięty.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: 'W tym samym pliku przechowywany jest jeszcze ${n} inny odcinek, który również zostanie usunięty:', few: 'W tym samym pliku przechowywane są jeszcze ${n} inne odcinki, które również zostaną usunięte:', many: 'W tym samym pliku przechowywanych jest jeszcze ${n} innych odcinków, które również zostaną usunięte:', other: 'W tym samym pliku przechowywany jest jeszcze ${n} innego odcinka, który również zostanie usunięty:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy nie mogło sprawdzić, które pliki zostaną usunięte, więc może usunąć więcej niż element wymieniony powyżej. Anuluj i spróbuj ponownie albo usuń mimo to.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Twój serwer nie podał informacji o plikach tego elementu, więc Plezy nie może sprawdzić, które pliki zostaną usunięte. Może usunąć więcej niż element wymieniony powyżej.', 'mediaMenu.mediaDeletedSuccessfully' => 'Usunięto element multimedialny', 'mediaMenu.mediaFailedToDelete' => 'Nie udało się usunąć elementu multimedialnego', 'mediaMenu.rate' => 'Oceń', @@ -2652,6 +3200,9 @@ extension on TranslationsPl { 'videoControls.playNext' => 'Odtwórz następny', 'videoControls.playButton' => 'Odtwórz', 'videoControls.pauseButton' => 'Pauza', + 'videoControls.playbackPaused' => 'Wstrzymano', + 'videoControls.playbackResumed' => 'Odtwarzanie', + 'videoControls.loadingVideo' => 'Ładowanie wideo', 'videoControls.showPlaybackControls' => 'Pokaż elementy sterujące odtwarzaniem', 'videoControls.hidePlaybackControls' => 'Ukryj elementy sterujące odtwarzaniem', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Przewiń do tyłu o ${seconds} sekund', @@ -2706,8 +3257,6 @@ extension on TranslationsPl { 'videoControls.subtitleDownloaded' => 'Napisy pobrane', 'videoControls.subtitleDownloadedNotApplied' => 'Napisy zostały pobrane, ale nie można ich było wybrać', 'videoControls.subtitleDownloadFailed' => 'Nie udało się pobrać napisów', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Szukaj języków...', 'messages.markedAsWatched' => 'Oznaczono jako obejrzane', 'messages.markedAsUnwatched' => 'Oznaczono jako nieobejrzane', @@ -2717,6 +3266,7 @@ extension on TranslationsPl { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: 'Automatycznie usunięto ${n} obejrzane pobranie', few: 'Automatycznie usunięto ${n} obejrzane pobrania', many: 'Automatycznie usunięto ${n} obejrzanych pobrań', other: 'Automatycznie usunięto ${n} obejrzanego pobrania', ), 'messages.removedFromContinueWatching' => 'Usunięto z kontynuowania oglądania', 'messages.errorLoading' => ({required Object error}) => 'Błąd: ${error}', + 'messages.searchPartialResults' => 'Niektórych serwerów multimediów nie udało się przeszukać. Wyświetlane są dostępne wyniki.', 'messages.streamInterrupted' => 'Strumień został przerwany. Naciśnij odtwarzanie lub przewiń, aby spróbować ponownie.', 'messages.liveStreamInterrupted' => 'Transmisja na żywo została przerwana. Naciśnij odtwarzanie, aby spróbować ponownie.', 'messages.fileInfoNotAvailable' => 'Informacje o pliku niedostępne', @@ -2755,6 +3305,8 @@ extension on TranslationsPl { 'messages.switchingToCompatiblePlayer' => 'Przełączanie na kompatybilny odtwarzacz...', 'messages.serverLimitTitle' => 'Odtwarzanie nie powiodło się', 'messages.serverLimitBody' => 'Błąd serwera (HTTP 500). Limit przepustowości/transkodowania prawdopodobnie odrzucił tę sesję. Poproś właściciela o zmianę.', + 'messages.mediaUnreadableTitle' => 'Plik niedostępny', + 'messages.mediaUnreadableBody' => 'Serwer znalazł ten element, ale nie mógł odczytać jego pliku (HTTP 404). Plik został prawdopodobnie przeniesiony, usunięty albo jego pamięć masowa jest niedostępna. Poproś właściciela serwera o sprawdzenie pliku i ponowne przeskanowanie biblioteki.', 'messages.logsUploaded' => 'Logi przesłane', 'messages.logsUploadFailed' => 'Nie udało się przesłać logów', 'messages.logId' => 'ID logu', @@ -2863,6 +3415,8 @@ extension on TranslationsPl { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sesja wygasła dla ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sesja wygasła dla ${count} serwerów', 'connections.signInAgain' => 'Zaloguj się ponownie', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Edytuj połączenie z ${product}', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Dodaj lub usuń adresy URL dla ${serverName}. Plezy będzie używać osiągalnego adresu URL o najniższym opóźnieniu.', 'discover.title' => 'Odkryj', 'discover.noContentAvailable' => 'Brak dostępnych treści', 'discover.addMediaToLibraries' => 'Dodaj multimedia do swoich bibliotek', @@ -2888,6 +3442,7 @@ extension on TranslationsPl { 'discover.minutesLeft' => ({required Object minutes}) => 'Pozostało ${minutes} min', 'discover.moreLikeThis' => 'Więcej podobnych', 'errors.searchFailed' => ({required Object error}) => 'Wyszukiwanie nie powiodło się: ${error}', + 'errors.searchUnavailable' => 'Wyszukiwanie nie mogło połączyć się z żadnym serwerem multimediów.', 'errors.connectionTimeout' => ({required Object context}) => 'Limit czasu połączenia przy ładowaniu ${context}', 'errors.connectionFailed' => 'Nie można połączyć się z serwerem multimediów', 'errors.unableToLoad' => ({required Object context}) => 'Nie udało się załadować ${context}. Spróbuj ponownie.', @@ -2995,6 +3550,36 @@ extension on TranslationsPl { 'logs.clearLogs' => 'Wyczyść logi', 'logs.copyLogs' => 'Kopiuj logi', 'logs.uploadLogs' => 'Prześlij logi', + 'startup.failedTitle' => 'Nie udało się uruchomić Plezy', + 'startup.failedBody' => 'Coś poszło nie tak podczas uruchamiania. Poniższe szczegóły wskazują, co zawiodło.', + 'startup.failedBodyRepairable' => 'Zapisany plik ustawień Plezy jest uszkodzony i musi zostać odbudowany, zanim Plezy będzie mogło się uruchomić. Ponawianie nie pomoże — wybierz Napraw pamięć.', + 'startup.phaseLabel' => 'Krok', + 'startup.showDetails' => 'Pokaż szczegóły', + 'startup.hideDetails' => 'Ukryj szczegóły', + 'startup.copyDetails' => 'Kopiuj szczegóły', + 'startup.detailsCopied' => 'Skopiowano szczegóły do schowka', + 'startup.uploadDetails' => 'Prześlij szczegóły', + 'startup.repairStorage' => 'Napraw pamięć', + 'startup.repairTitle' => 'Naprawić zapisane dane?', + 'startup.repairBodyCommon' => 'Plik ustawień Plezy jest uszkodzony i nie można go odczytać. Naprawa przywraca wszystkie ustawienia do wartości domyślnych.', + 'startup.repairBodyOneCredential' => 'Jedno zapisane logowanie jest uszkodzone i nie można go odczytać. Naprawa usunie tylko je; pozostałe ustawienia pozostaną nietknięte.', + 'startup.repairBodySignInsKept' => 'Twoje serwery i profile powinny pozostać zalogowane.', + 'startup.repairBodySignInsLost' => 'Klucza chroniącego zapisane logowania nie można odzyskać z tego pliku, więc będziesz musiał zalogować się ponownie na każdym serwerze i profilu. Nic na Twoim serwerze multimediów nie zostanie zmienione.', + 'startup.repairBodySessionsUncertain' => 'Usługi śledzenia (MAL, AniList, Simkl, Trakt) i Seerr są przechowywane osobno i mogą, ale nie muszą przetrwać. Plezy dokładnie poinformuje Cię, co zachowało.', + 'startup.repairConfirm' => 'Napraw', + 'startup.repairSucceeded' => 'Naprawiono pamięć', + 'startup.repairNeedsRestart' => 'Naprawiono pamięć — wymagany restart', + 'startup.restartRequiredBody' => 'Twoje dane zostały naprawione, ale Plezy musi uruchomić się od nowa, zanim będzie mogło z nich korzystać. Zamknij Plezy i otwórz je ponownie.', + 'startup.quitPlezy' => 'Zamknij Plezy', + 'startup.repairFailed' => 'Naprawa nie powiodła się', + 'startup.repairKeptSignIns' => 'Twoje serwery i profile są nadal zalogowane.', + 'startup.repairLostSignIns' => 'Nie udało się odzyskać klucza chroniącego zapisane logowania. Musisz zalogować się ponownie na każdym serwerze i profilu.', + 'startup.repairLostSessions' => 'Utracono co najmniej jedno połączenie z usługą śledzenia lub Seerr i trzeba je ponownie połączyć.', + 'startup.backupTitle' => 'Zachowano kopię uszkodzonego pliku', + 'startup.backupWarning' => 'Zawiera Twoje dane logowania. Nie przesyłaj ani nie udostępniaj jej.', + 'startup.deleteBackup' => 'Usuń kopię', + 'startup.backupDeleted' => 'Usunięto kopię.', + 'startup.previousFailureTitle' => 'Ostatnim razem nie udało się uruchomić Plezy', 'licenses.relatedPackages' => 'Powiązane pakiety', 'licenses.license' => 'Licencja', 'licenses.licenseNumber' => ({required Object number}) => 'Licencja ${number}', @@ -3038,6 +3623,113 @@ extension on TranslationsPl { 'explore.searchEmpty' => ({required Object query}) => 'Brak wyników dla "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Szukaj filmów i seriali w ${source}.', 'explore.searchFailed' => 'Wyszukiwanie nie powiodło się. Sprawdź połączenie i spróbuj ponownie.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} popularne', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} emitowane', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} najwyżej oceniane', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} w ulubionych', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} na czasie', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} w sezonie ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} ogląda teraz', + 'explore.badge.available' => 'Dostępne', + 'explore.badge.partiallyAvailable' => 'Częściowo dostępne', + 'explore.badge.availableIn4k' => 'Dostępne w 4K', + 'explore.badge.requested' => 'Zamówiono', + 'explore.badge.pendingApproval' => 'Oczekuje na zatwierdzenie', + 'explore.badge.processing' => 'Przetwarzanie', + 'explore.badge.declined' => 'Odrzucono', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Żądanie nie powiodło się', + 'explore.badge.requested4k' => 'Zamówiono w 4K', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} sezonów', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Odc. ${episode} za ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Następny za ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} odc.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/odc.', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} na listach', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} obejrzało dziś', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} obejrzało w tym tygodniu', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} obejrzało w tym miesiącu', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} obejrzało w tym roku', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} widzów', + 'explore.stats.planning' => ({required Object n}) => '${n} planuje obejrzeć', + 'explore.stats.favorited' => ({required Object n}) => '${n} w ulubionych', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} porzuciło', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: '${n} komentarz', few: '${n} komentarze', many: '${n} komentarzy', other: '${n} komentarza', ), + 'explore.stats.votes' => ({required Object n}) => '${n} głosów', + 'explore.stats.watching' => ({required Object n}) => '${n} ogląda', + 'explore.stats.completed' => ({required Object n}) => '${n} ukończyło', + 'explore.stats.onHold' => ({required Object n}) => '${n} wstrzymało', + 'explore.stats.dropped' => ({required Object n}) => '${n} porzuciło', + 'explore.season.winter' => 'Zima', + 'explore.season.spring' => 'Wiosna', + 'explore.season.summer' => 'Lato', + 'explore.season.fall' => 'Jesień', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV Short', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Odcinek specjalny', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Muzyka', + 'explore.format.other' => 'Inne', + 'explore.sourceMaterial.original' => 'Oryginał', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Powieść', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Gra', + 'explore.sourceMaterial.webComic' => 'Komiks internetowy', + 'explore.sourceMaterial.musicRelease' => 'Muzyka', + 'explore.sourceMaterial.otherMedia' => 'Inne', + 'explore.creditRole.director' => 'Reżyser', + 'explore.creditRole.writer' => 'Scenarzysta', + 'explore.creditRole.producer' => 'Producent', + 'explore.creditRole.creator' => 'Twórca', + 'explore.creditRole.composer' => 'Kompozytor', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Sequel', + 'explore.relation.sideStory' => 'Poboczna historia', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Wersja alternatywna', + 'explore.relation.summary' => 'Streszczenie', + 'explore.relation.parentStory' => 'Historia pierwotna', + 'explore.relation.adaptation' => 'Adaptacja', + 'explore.relation.other' => 'Powiązane', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Emisja ${day} o ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Emisja ${day} o ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Tytuł oryginalny', + 'explore.detail.alsoKnownAs' => 'Znany również jako', + 'explore.detail.studios' => 'Studia', + 'explore.detail.country' => 'Kraj', + 'explore.detail.language' => 'Język', + 'explore.detail.released' => 'Premiera', + 'explore.detail.physicalRelease' => 'Na nośniku', + 'explore.detail.ended' => 'Zakończony', + 'explore.detail.addedOn' => ({required Object date}) => 'Dodano ${date}', + 'explore.detail.yourRating' => 'Twoja ocena', + 'explore.detail.budget' => 'Budżet', + 'explore.detail.revenue' => 'Box office', + 'explore.detail.contentAdvisory' => 'Klasyfikacja wiekowa', + 'explore.detail.tags' => 'Tagi', + 'explore.detail.revealSpoilerTags' => 'Pokaż tagi zawierające spoilery', + 'explore.detail.links' => 'Linki', + 'explore.detail.watchOn' => 'Oglądaj na', + 'explore.detail.watchTrailer' => 'Obejrzyj zwiastun', + 'explore.detail.openOn' => ({required Object site}) => 'Otwórz na ${site}', + 'explore.detail.crew' => 'Obsada i ekipa', + 'explore.detail.ratings' => 'Oceny', + 'explore.detail.schedule' => 'Harmonogram', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: 'Polecany przez ${n} użytkownika', few: 'Polecany przez ${n} użytkowników', many: 'Polecany przez ${n} użytkowników', other: 'Polecany przez ${n} użytkownika', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Polecany przez ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Dodany do ulubionych przez ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} jeszcze nie wyemitowano', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Polecany przez ${percent} widzów', + 'explore.detail.relatedTitles' => 'Powiązane tytuły', + 'explore.detail.background' => 'Tło', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: '${n} wynik', few: '${n} wyniki', many: '${n} wyników', other: '${n} wyniku', ), 'liveTv.title' => 'TV na żywo', 'liveTv.guide' => 'Przewodnik', 'liveTv.noChannels' => 'Brak dostępnych kanałów', @@ -3220,8 +3912,6 @@ extension on TranslationsPl { 'watchTogether.relayUnreachable' => 'Serwer pośredniczący jest nieosiągalny. Blokada operatora internetowego może uniemożliwiać korzystanie z funkcji „Oglądaj razem”.', 'watchTogether.reconnectingToHost' => 'Ponowne łączenie z gospodarzem...', 'watchTogether.currentPlayback' => 'Bieżące odtwarzanie', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Dołącz do bieżącego odtwarzania', 'watchTogether.joinCurrentPlaybackDescription' => 'Wróć do treści oglądanej obecnie przez gospodarza', 'watchTogether.failedToOpenCurrentPlayback' => 'Nie udało się otworzyć bieżącego odtwarzania', @@ -3290,9 +3980,15 @@ extension on TranslationsPl { 'downloads.editSyncRule' => 'Edytuj regułę synchronizacji', 'downloads.removeSyncRule' => 'Usuń regułę synchronizacji', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Zatrzymać synchronizację "${title}"? Pobrane odcinki zostaną zachowane.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Zatrzymać synchronizację "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Usuń również powiązane pobrania', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Pobrania używane przez inną regułę synchronizacji lub profil zostaną zachowane.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Reguła synchronizacji utworzona — zachowywanie ${count} nieobejrzanych odcinków', 'downloads.syncRuleUpdated' => 'Reguła synchronizacji zaktualizowana', 'downloads.syncRuleRemoved' => 'Reguła synchronizacji usunięta', + 'downloads.syncRuleAndDownloadsRemoved' => 'Usunięto regułę synchronizacji i powiązane pobrania', + 'downloads.syncRuleCleanupBusy' => 'Reguły synchronizacji są aktualnie aktualizowane. Spróbuj ponownie za chwilę.', + 'downloads.syncRuleCleanupUnavailable' => 'Nie udało się bezpiecznie zidentyfikować powiązanych pobrań. Połącz się ponownie z serwerem i spróbuj ponownie albo usuń regułę bez usuwania pobrań.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => 'Zsynchronizowano ${count} nowych odcinków dla ${title}', 'downloads.activeSyncRules' => 'Reguły synchronizacji', 'downloads.noSyncRules' => 'Brak reguł synchronizacji', @@ -3455,6 +4151,8 @@ extension on TranslationsPl { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Śr. DV RPU', 'performanceOverlay.dvSampleAverage' => 'Śr. próbki DV', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Maks. luma', 'performanceOverlay.minLuma' => 'Min. luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3624,6 +4322,7 @@ extension on TranslationsPl { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Aktywuj Plezy w ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Odwiedź ${url} i wpisz ten kod:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Otwórz ${service}, aby aktywować', @@ -3647,9 +4346,12 @@ extension on TranslationsPl { 'services.libraryFilter.modeHintWhitelist' => 'Synchronizuj tylko biblioteki zaznaczone poniżej.', 'services.libraryFilter.libraries' => 'Biblioteki', 'services.libraryFilter.noLibraries' => 'Brak dostępnych bibliotek', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Dodaj serwer ${product}', 'addServer.serverUrls' => 'Adresy URL serwera', 'addServer.serverUrlsHelper' => 'Można podać wiele adresów URL rozdzielonych przecinkami.', 'addServer.findServer' => 'Znajdź serwer', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Szukanie lokalnych serwerów ${product}...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Lokalne serwery ${product}', 'addServer.username' => 'Nazwa użytkownika', 'addServer.password' => 'Hasło', 'addServer.signIn' => 'Zaloguj się', @@ -3661,11 +4363,15 @@ extension on TranslationsPl { 'addServer.addPlexTitle' => 'Zaloguj się przez Plex', 'addServer.pinExpired' => 'PIN wygasł przed zalogowaniem. Spróbuj ponownie.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Nie udało się zarejestrować konta: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Podaj adres URL serwera ${product}', 'addServer.addConnectionTitle' => 'Dodaj połączenie', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Dodaj do ${name}', 'addServer.signInWithPlexCard' => 'Zaloguj się przez Plex', 'addServer.signInWithPlexCardSubtitle' => 'Autoryzuj to urządzenie. Serwery udostępnione zostaną dodane.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Autoryzuj konto Plex. Użytkownicy Home staną się profilami.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Połącz z ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Podaj adres URL serwera, nazwę użytkownika i hasło.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Zaloguj się do serwera ${product}. Powiązane z ${name}.', 'addServer.borrowFromAnotherProfile' => 'Pożycz z innego profilu', 'addServer.borrowFromAnotherProfileSubtitle' => 'Użyj połączenia innego profilu. Profile chronione PIN-em wymagają podania PIN-u.', _ => null, diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index fec7e46a..2e835b77 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -67,6 +67,7 @@ class TranslationsPt extends Translations with BaseTranslations 'Aguardando autenticação...\nEntre pelo navegador.'; @override String get useBrowser => 'Usar navegador'; @override String get or => 'ou'; + @override String connectToMediaBrowser({required Object product}) => 'Conectar ao ${product}'; @override String get useQuickConnect => 'Usar Quick Connect'; @override String get quickConnectInstructions => 'Abra o Quick Connect no Jellyfin e insira este código.'; @override String get quickConnectWaiting => 'Aguardando aprovação…'; @@ -175,6 +177,7 @@ class _Translations$common$pt extends Translations$common$en { @override String get fullscreen => 'Tela cheia'; @override String get exitFullscreen => 'Sair da tela cheia'; @override String get pressBackAgainToExit => 'Pressione voltar novamente para sair'; + @override late final _Translations$common$ratingSource$pt ratingSource = _Translations$common$ratingSource$pt._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$pt extends Translations$settings$en { @override String get darkTheme => 'Escuro'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Densidade da Biblioteca'; + @override String get displayScale => 'Escala de exibição'; @override String get compact => 'Compacto'; @override String get comfortable => 'Confortável'; @override String get tvCornerSpotlightBackdrop => 'Imagem de destaque no canto'; @@ -287,6 +291,11 @@ class _Translations$settings$pt extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => 'Automático (Recomendado)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB de memória disponível. Um buffer de ${size}MB pode afetar a reprodução.'; + @override String get playbackBuffer => 'Buffer de reprodução'; + @override String get playbackBufferAuto => 'Automático (recomendado)'; + @override String get playbackBufferLarge => 'Grande'; + @override String get playbackBufferExtraLarge => 'Extra grande'; + @override String get playbackBufferDescription => 'Faz buffer extra contra conexões instáveis. Também limitado pelo tamanho do buffer.'; @override String get defaultQualityTitle => 'Qualidade padrão'; @override String get musicQualityTitle => 'Qualidade da música'; @override String get subtitleStyling => 'Estilo de Legendas'; @@ -320,6 +329,9 @@ class _Translations$settings$pt extends Translations$settings$en { @override String get debugLoggingDescription => 'Ativar log detalhado para solução de problemas'; @override String get viewLogs => 'Ver Logs'; @override String get viewLogsDescription => 'Ver logs do app'; + @override String get clearImageCache => 'Limpar cache de imagens'; + @override String get clearImageCacheDescription => 'Limpar artes e miniaturas em cache. As imagens podem carregar mais devagar até serem baixadas novamente.'; + @override String get clearImageCacheSuccess => 'Cache de imagens limpo com sucesso'; @override String get resetSettings => 'Redefinir Configurações'; @override String get resetSettingsDescription => 'Restaurar configurações padrão. Não pode ser desfeito.'; @override String get resetSettingsSuccess => 'Configurações redefinidas com sucesso'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$pt extends Translations$fileInfo$en { // Translations @override String get title => 'Informações do arquivo'; + @override String get overview => 'Visão geral'; @override String get video => 'Vídeo'; @override String get audio => 'Áudio'; @override String get subtitles => 'Legendas'; + @override String get images => 'Imagens incorporadas'; + @override String get dataStreams => 'Fluxos de dados'; + @override String get lyrics => 'Letras'; @override String get file => 'Arquivo'; + @override String get attachments => 'Anexos'; + @override String get delivery => 'Entrega'; + @override String versionCounter({required Object index, required Object count}) => 'Versão ${index} de ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Arquivo ${index} de ${count}'; + @override String get noStreams => 'O servidor não relatou fluxos para este arquivo.'; + @override String get copyPath => 'Copiar caminho'; + @override String get pathCopied => 'Caminho do arquivo copiado'; @override String get codec => 'Codec'; + @override String get codecTag => 'Tag do codec'; @override String get resolution => 'Resolução'; + @override String get codedResolution => 'Resolução codificada'; @override String get bitrate => 'Taxa de bits'; @override String get frameRate => 'Taxa de Quadros'; + @override String get rotation => 'Rotação'; + @override String get comment => 'Comentário'; + @override String get audioDescription => 'Descrição de áudio'; + @override String get headerCompression => 'Compactação de cabeçalho'; + @override String get sidecarFile => 'Arquivo sidecar'; + @override String get transportTimestamp => 'Carimbo de transporte'; + @override String get displayOffset => 'Deslocamento de exibição'; + @override String get previewFailureCode => 'Código de falha da pré-visualização'; + @override String get previewRetries => 'Tentativas da pré-visualização'; @override String get aspectRatio => 'Proporção'; + @override String get pixelAspectRatio => 'Proporção de aspecto de pixel'; @override String get profile => 'Perfil'; + @override String get level => 'Nível'; @override String get bitDepth => 'Profundidade de bits'; + @override String get pixelFormat => 'Formato de pixel'; @override String get colorSpace => 'Espaço de Cor'; @override String get colorRange => 'Faixa de Cor'; @override String get colorPrimaries => 'Primárias de Cor'; + @override String get colorTransfer => 'Transferência de cor'; @override String get chromaSubsampling => 'Subamostragem de Croma'; + @override String get chromaLocation => 'Localização do croma'; + @override String get scanType => 'Tipo de varredura'; + @override String get interlaced => 'Entrelaçado'; + @override String get anamorphic => 'Anamórfico'; + @override String get referenceFrames => 'Quadros de referência'; + @override String get dynamicRange => 'Faixa dinâmica'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Nível Dolby Vision'; + @override String get dolbyVisionVersion => 'Versão Dolby Vision'; + @override String get dolbyVisionLayers => 'Camadas Dolby Vision'; + @override String get baseLayerCompatibility => 'Compatibilidade da camada base'; + @override String get avcBitstream => 'Bitstream AVC'; + @override String get nalLengthSize => 'Tamanho do comprimento NAL'; + @override String get scalingMatrix => 'Matriz de dimensionamento personalizada'; + @override String get streamIdentifier => 'Identificador do fluxo'; + @override String get streamIndex => 'Índice do fluxo'; + @override String get streamId => 'ID do fluxo'; + @override String get language => 'Idioma'; + @override String get languageCode => 'Código do idioma'; + @override String get streamTitle => 'Título da faixa'; @override String get channels => 'Canais'; + @override String get sampleRate => 'Taxa de amostragem'; + @override String get spatialAudio => 'Áudio espacial'; + @override String get textBased => 'Baseado em texto'; + @override String get subtitleFormat => 'Formato sidecar'; + @override String get provider => 'Provedor'; + @override String get matchScore => 'Pontuação de correspondência'; + @override String get externalDelivery => 'Pode ser servido separadamente'; + @override String get sidecarPath => 'Caminho do sidecar'; + @override String get sourceStream => 'Copiado de'; + @override String get temporary => 'Temporário'; + @override String get timeBase => 'Base de tempo'; @override String get overallBitrate => 'Taxa de bits total'; @override String get path => 'Caminho'; + @override String get fileName => 'Nome do arquivo'; @override String get size => 'Tamanho'; + @override String get totalSize => 'Tamanho total'; @override String get container => 'Contêiner'; @override String get duration => 'Duração'; + @override String get previewThumbnails => 'Miniaturas de pré-visualização'; + @override String get previewIndex => 'Índice de pré-visualização'; + @override String get packetLength => 'Tamanho do pacote'; + @override String get filePresent => 'Arquivo presente'; + @override String get fileReadable => 'Legível pelo servidor'; + @override String get streamPath => 'Caminho do fluxo'; @override String get optimizedForStreaming => 'Otimizado para transmissão'; @override String get has64bitOffsets => 'Deslocamentos de 64 bits'; + @override String get protocol => 'Protocolo'; + @override String get mediaType => 'Tipo de mídia'; + @override String get sourceKind => 'Tipo de origem'; + @override String get optimizedVersion => 'Versão otimizada'; + @override String get optimizationTarget => 'Alvo de otimização'; + @override String get deletedAt => 'Excluído'; + @override String get remoteSource => 'Origem remota'; + @override String get infiniteStream => 'Fluxo infinito'; + @override String get directPlay => 'Reprodução direta'; + @override String get directStream => 'Fluxo direto'; + @override String get transcoding => 'Transcodificação'; + @override String get etag => 'ETag'; + @override String get versionId => 'ID da versão'; + @override String get fileId => 'ID do arquivo'; + @override String get defaultAudioTrack => 'Faixa de áudio padrão'; + @override String get defaultSubtitleTrack => 'Faixa de legenda padrão'; + @override String get subtitlesOff => 'Desativadas'; + @override String get flagDefault => 'Padrão'; + @override String get flagForced => 'Forçada'; + @override String get flagSelected => 'Selecionada'; + @override String get flagExternal => 'Externa'; + @override String get flagHearingImpaired => 'Deficiência auditiva'; + @override String get flagDub => 'Dublada'; + @override String get flagOriginal => 'Original'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$pt extends Translations$mediaMenu$en { @override String get shufflePlay => 'Reprodução Aleatória'; @override String get shuffleNotAvailableOffline => 'Reprodução aleatória indisponível offline'; @override String get fileInfo => 'Informações do arquivo'; + @override String get deleteEpisodeFromServer => 'Excluir episódio do servidor'; + @override String get deleteSeasonFromServer => 'Excluir temporada do servidor'; + @override String get deleteShowFromServer => 'Excluir série do servidor'; + @override String get deleteMovieFromServer => 'Excluir filme do servidor'; + @override String get deleteEpisodeTitle => 'Excluir este episódio?'; + @override String get deleteSeasonTitle => 'Excluir esta temporada?'; + @override String get deleteShowTitle => 'Excluir esta série?'; + @override String get deleteMovieTitle => 'Excluir este filme?'; + @override String get deleteEpisodeConfirm => 'Excluir episódio'; + @override String get deleteSeasonConfirm => 'Excluir temporada'; + @override String get deleteShowConfirm => 'Excluir série'; + @override String get deleteMovieConfirm => 'Excluir filme'; + @override String get deleteAnyway => 'Excluir mesmo assim'; + @override String confirmDeleteTarget({required Object title}) => 'Excluir permanentemente ${title} do seu servidor?'; @override String get deleteMultipleWarning => 'Isso inclui todos os episódios e seus arquivos.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: 'Isso exclui o ${n} episódio e o arquivo dele.', + other: 'Isso exclui todos os ${n} episódios e os arquivos deles.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: 'Este item está armazenado como ${n} arquivo, que será excluído.', + other: 'Este item está armazenado em ${n} arquivos, e todos eles serão excluídos.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: 'Mais ${n} episódio está armazenado no mesmo arquivo e também será excluído:', + other: 'Mais ${n} episódios estão armazenados no mesmo arquivo e também serão excluídos:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'O Plezy não conseguiu verificar quais arquivos serão removidos, então pode excluir mais do que o item acima. Cancele e tente novamente, ou exclua mesmo assim.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Seu servidor não forneceu detalhes do arquivo para este item, então o Plezy não pode verificar quais arquivos serão removidos. Pode excluir mais do que o item acima.'; @override String get mediaDeletedSuccessfully => 'Item de mídia excluído com sucesso'; @override String get mediaFailedToDelete => 'Falha ao excluir item de mídia'; @override String get rate => 'Avaliar'; @@ -657,6 +786,9 @@ class _Translations$videoControls$pt extends Translations$videoControls$en { @override String get playNext => 'Reproduzir Próximo'; @override String get playButton => 'Reproduzir'; @override String get pauseButton => 'Pausar'; + @override String get playbackPaused => 'Pausado'; + @override String get playbackResumed => 'Reproduzindo'; + @override String get loadingVideo => 'Carregando vídeo'; @override String get showPlaybackControls => 'Mostrar controles de reprodução'; @override String get hidePlaybackControls => 'Ocultar controles de reprodução'; @override String seekBackwardButton({required Object seconds}) => 'Retroceder ${seconds} segundos'; @@ -726,6 +858,7 @@ class _Translations$messages$pt extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Removido de Continuar assistindo'; @override String errorLoading({required Object error}) => 'Erro: ${error}'; + @override String get searchPartialResults => 'Alguns servidores de mídia não puderam ser pesquisados. Exibindo os resultados disponíveis.'; @override String get streamInterrupted => 'A transmissão foi interrompida. Pressione reproduzir ou avance para tentar novamente.'; @override String get liveStreamInterrupted => 'A transmissão ao vivo foi interrompida. Pressione reproduzir para tentar novamente.'; @override String get fileInfoNotAvailable => 'Informações do arquivo não disponíveis'; @@ -764,6 +897,8 @@ class _Translations$messages$pt extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Alternando para um reprodutor compatível...'; @override String get serverLimitTitle => 'Falha na reprodução'; @override String get serverLimitBody => 'Erro do servidor (HTTP 500). Um limite de largura de banda ou transcodificação provavelmente rejeitou esta sessão. Peça ao proprietário do servidor para ajustá-lo.'; + @override String get mediaUnreadableTitle => 'Arquivo indisponível'; + @override String get mediaUnreadableBody => 'O servidor encontrou este item, mas não conseguiu ler o arquivo (HTTP 404). O arquivo provavelmente foi movido, excluído ou o armazenamento está offline. Peça ao responsável pelo servidor para verificar o arquivo e reexaminar a biblioteca.'; @override String get logsUploaded => 'Logs enviados'; @override String get logsUploadFailed => 'Falha ao enviar logs'; @override String get logId => 'ID do log'; @@ -917,6 +1052,8 @@ class _Translations$connections$pt extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sessão de ${name} expirada'; @override String sessionExpiredMany({required Object count}) => 'Sessões expiradas em ${count} servidores'; @override String get signInAgain => 'Entrar novamente'; + @override String editMediaBrowserTitle({required Object product}) => 'Editar conexão do ${product}'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Adicione ou remova URLs para ${serverName}. O Plezy usará a URL acessível com menor latência.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$pt extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Falha na busca: ${error}'; + @override String get searchUnavailable => 'A busca não conseguiu alcançar nenhum servidor de mídia.'; @override String connectionTimeout({required Object context}) => 'Tempo de conexão esgotado ao carregar ${context}'; @override String get connectionFailed => 'Não foi possível conectar ao servidor de mídia'; @override String unableToLoad({required Object context}) => 'Não foi possível carregar ${context}. Tente novamente.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$pt extends Translations$logs$en { @override String get uploadLogs => 'Enviar Logs'; } +// Path: startup +class _Translations$startup$pt extends Translations$startup$en { + _Translations$startup$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'O Plezy não conseguiu iniciar'; + @override String get failedBody => 'Algo deu errado durante a inicialização. Os detalhes abaixo identificam o que falhou.'; + @override String get failedBodyRepairable => 'O arquivo de configurações salvo do Plezy está danificado e precisa ser reconstruído antes que o Plezy possa iniciar. Tentar novamente não vai ajudar — escolha Reparar armazenamento.'; + @override String get phaseLabel => 'Etapa'; + @override String get showDetails => 'Mostrar detalhes'; + @override String get hideDetails => 'Ocultar detalhes'; + @override String get copyDetails => 'Copiar detalhes'; + @override String get detailsCopied => 'Detalhes copiados para a área de transferência'; + @override String get uploadDetails => 'Enviar detalhes'; + @override String get repairStorage => 'Reparar armazenamento'; + @override String get repairTitle => 'Reparar dados armazenados?'; + @override String get repairBodyCommon => 'O arquivo de configurações do Plezy está danificado e não pode ser lido. Reparar redefine todas as configurações para o padrão.'; + @override String get repairBodyOneCredential => 'Um login salvo está danificado e não pode ser lido. Reparar remove apenas ele; suas outras configurações permanecem intactas.'; + @override String get repairBodySignInsKept => 'Seus servidores e perfis devem permanecer conectados.'; + @override String get repairBodySignInsLost => 'A chave que protege seus logins salvos não pode ser recuperada deste arquivo, então você terá que entrar novamente em todos os servidores e perfis. Nada no seu servidor de mídia é afetado.'; + @override String get repairBodySessionsUncertain => 'Os rastreadores (MAL, AniList, Simkl, Trakt) e o Seerr são armazenados separadamente e podem ou não ser preservados. O Plezy informará exatamente o que foi mantido.'; + @override String get repairConfirm => 'Reparar'; + @override String get repairSucceeded => 'Armazenamento reparado'; + @override String get repairNeedsRestart => 'Armazenamento reparado — reinício necessário'; + @override String get restartRequiredBody => 'Seus dados foram reparados, mas o Plezy precisa iniciar do zero antes de usá-los. Feche o Plezy e abra-o novamente.'; + @override String get quitPlezy => 'Sair do Plezy'; + @override String get repairFailed => 'Falha no reparo'; + @override String get repairKeptSignIns => 'Seus servidores e perfis ainda estão conectados.'; + @override String get repairLostSignIns => 'A chave que protege seus logins salvos não pôde ser recuperada. Você terá que entrar novamente em todos os servidores e perfis.'; + @override String get repairLostSessions => 'Pelo menos uma conexão de rastreador ou do Seerr foi perdida e precisa ser reconectada.'; + @override String get backupTitle => 'Uma cópia do arquivo danificado foi mantida'; + @override String get backupWarning => 'Ele contém suas credenciais de login. Não envie nem compartilhe.'; + @override String get deleteBackup => 'Excluir cópia'; + @override String get backupDeleted => 'Cópia excluída.'; + @override String get previousFailureTitle => 'O Plezy falhou ao iniciar da última vez'; +} + // Path: licenses class _Translations$licenses$pt extends Translations$licenses$en { _Translations$licenses$pt._(TranslationsPt root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$pt extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Nenhum resultado para "${query}"'; @override String searchPrompt({required Object source}) => 'Busque filmes e séries em ${source}.'; @override String get searchFailed => 'Falha na busca. Verifique sua conexão e tente novamente.'; + @override late final _Translations$explore$badge$pt badge = _Translations$explore$badge$pt._(_root); + @override late final _Translations$explore$stats$pt stats = _Translations$explore$stats$pt._(_root); + @override late final _Translations$explore$season$pt season = _Translations$explore$season$pt._(_root); + @override late final _Translations$explore$format$pt format = _Translations$explore$format$pt._(_root); + @override late final _Translations$explore$sourceMaterial$pt sourceMaterial = _Translations$explore$sourceMaterial$pt._(_root); + @override late final _Translations$explore$creditRole$pt creditRole = _Translations$explore$creditRole$pt._(_root); + @override late final _Translations$explore$relation$pt relation = _Translations$explore$relation$pt._(_root); + @override String broadcast({required Object day, required Object time}) => 'Vai ao ar ${day} às ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Vai ao ar ${day} às ${time} ${timezone}'; + @override late final _Translations$explore$detail$pt detail = _Translations$explore$detail$pt._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: '${n} resultado', + other: '${n} resultados', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$pt extends Translations$downloads$en { @override String get editSyncRule => 'Editar regra de sincronização'; @override String get removeSyncRule => 'Remover regra de sincronização'; @override String removeSyncRuleConfirm({required Object title}) => 'Parar de sincronizar "${title}"? Os episódios baixados serão mantidos.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Parar a sincronização de "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Também excluir downloads associados'; + @override String get deleteSyncRuleDownloadsDescription => 'Downloads usados por outra regra de sincronização ou perfil serão mantidos.'; @override String syncRuleCreated({required Object count}) => 'Regra de sincronização criada — mantendo ${count} episódios não assistidos'; @override String get syncRuleUpdated => 'Regra de sincronização atualizada'; @override String get syncRuleRemoved => 'Regra de sincronização removida'; + @override String get syncRuleAndDownloadsRemoved => 'Regra de sincronização e downloads associados removidos'; + @override String get syncRuleCleanupBusy => 'As regras de sincronização estão sendo atualizadas. Tente novamente em instantes.'; + @override String get syncRuleCleanupUnavailable => 'Os downloads associados não puderam ser identificados com segurança. Reconecte o servidor e tente novamente, ou remova a regra sem excluir os downloads.'; @override String syncedNewEpisodes({required Object count, required Object title}) => '${count} novos episódios sincronizados para ${title}'; @override String get activeSyncRules => 'Regras de sincronização'; @override String get noSyncRules => 'Nenhuma regra de sincronização'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$pt extends Translations$addServer$en { final TranslationsPt _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Adicionar servidor ${product}'; @override String get serverUrls => 'URLs do servidor'; @override String get serverUrlsHelper => 'Várias URLs são permitidas, separadas por vírgulas.'; @override String get findServer => 'Encontrar servidor'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Procurando servidores ${product} locais...'; + @override String localMediaBrowserServers({required Object product}) => 'Servidores ${product} locais'; @override String get username => 'Usuário'; @override String get password => 'Senha'; @override String get signIn => 'Entrar'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$pt extends Translations$addServer$en { @override String get addPlexTitle => 'Entrar com Plex'; @override String get pinExpired => 'O PIN expirou antes de entrar. Tente novamente.'; @override String failedToRegisterAccount({required Object error}) => 'Falha ao registrar a conta: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Digite a URL do seu servidor ${product}'; @override String get addConnectionTitle => 'Adicionar conexão'; @override String addConnectionTitleScoped({required Object name}) => 'Adicionar a ${name}'; @override String get signInWithPlexCard => 'Entrar com Plex'; @override String get signInWithPlexCardSubtitle => 'Autorize este dispositivo. Servidores compartilhados são adicionados.'; @override String get signInWithPlexCardSubtitleScoped => 'Autorize uma conta Plex. Os usuários do Plex Home se tornam perfis.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Conectar ao ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Digite a URL do servidor, o nome de usuário e a senha.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Entre no seu servidor ${product}. Vinculado a ${name}.'; @override String get borrowFromAnotherProfile => 'Pegar emprestado de outro perfil'; @override String get borrowFromAnotherProfileSubtitle => 'Reutilize a conexão de outro perfil. Perfis protegidos por PIN exigem PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$pt extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get critic => 'Críticos'; + @override String get audience => 'Público'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Críticos do Rotten Tomatoes'; + @override String get rottenTomatoesAudience => 'Público do Rotten Tomatoes'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$pt extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$pt._(TranslationsPt root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$pt extends Translations$explore$status$en { @override String get upcoming => 'Em breve'; } +// Path: explore.badge +class _Translations$explore$badge$pt extends Translations$explore$badge$en { + _Translations$explore$badge$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} popular'; + @override String rankAiring({required Object n}) => '#${n} no ar'; + @override String rankRated({required Object n}) => '#${n} avaliado'; + @override String rankFavorited({required Object n}) => '#${n} favoritado'; + @override String rankTrending({required Object n}) => '#${n} em alta'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} em ${season}'; + @override String watchingNow({required Object n}) => '${n} assistindo'; + @override String get available => 'Disponível'; + @override String get partiallyAvailable => 'Parcialmente disponível'; + @override String get availableIn4k => '4K disponível'; + @override String get requested => 'Solicitado'; + @override String get pendingApproval => 'Aguardando aprovação'; + @override String get processing => 'Processando'; + @override String get declined => 'Recusado'; + @override String get requestFailed => 'Falha na solicitação'; + @override String get requested4k => '4K solicitado'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} temporadas'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Ep ${episode} em ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Próximo em ${duration}'; + @override String episodesShort({required Object n}) => '${n} epps'; + @override String minutesPerEpisode({required Object n}) => '${n} min/ep'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$pt extends Translations$explore$stats$en { + _Translations$explore$stats$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} listados'; + @override String viewersDay({required Object n}) => '${n} assistiram hoje'; + @override String viewersWeek({required Object n}) => '${n} assistiram esta semana'; + @override String viewersMonth({required Object n}) => '${n} assistiram este mês'; + @override String viewersYear({required Object n}) => '${n} assistiram este ano'; + @override String viewersAllTime({required Object n}) => '${n} espectadores'; + @override String planning({required Object n}) => '${n} pretendem assistir'; + @override String favorited({required Object n}) => '${n} favoritos'; + @override String dropRate({required Object percent}) => '${percent} abandonaram'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: '${n} comentário', + other: '${n} comentários', + ); + @override String votes({required Object n}) => '${n} votos'; + @override String watching({required Object n}) => '${n} assistindo'; + @override String completed({required Object n}) => '${n} concluíram'; + @override String onHold({required Object n}) => '${n} em pausa'; + @override String dropped({required Object n}) => '${n} abandonaram'; +} + +// Path: explore.season +class _Translations$explore$season$pt extends Translations$explore$season$en { + _Translations$explore$season$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get winter => 'Inverno'; + @override String get spring => 'Primavera'; + @override String get summer => 'Verão'; + @override String get fall => 'Outono'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$pt extends Translations$explore$format$en { + _Translations$explore$format$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'Curta de TV'; + @override String get movie => 'Filme'; + @override String get special => 'Especial'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Música'; + @override String get other => 'Outro'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$pt extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get original => 'Original'; + @override String get manga => 'Mangá'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Romance'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Jogo'; + @override String get webComic => 'Webcomic'; + @override String get musicRelease => 'Música'; + @override String get otherMedia => 'Outro'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$pt extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get director => 'Diretor'; + @override String get writer => 'Roteirista'; + @override String get producer => 'Produtor'; + @override String get creator => 'Criador'; + @override String get composer => 'Compositor'; +} + +// Path: explore.relation +class _Translations$explore$relation$pt extends Translations$explore$relation$en { + _Translations$explore$relation$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequela'; + @override String get sequel => 'Sequela'; + @override String get sideStory => 'História paralela'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Versão alternativa'; + @override String get summary => 'Resumo'; + @override String get parentStory => 'História principal'; + @override String get adaptation => 'Adaptação'; + @override String get other => 'Relacionado'; +} + +// Path: explore.detail +class _Translations$explore$detail$pt extends Translations$explore$detail$en { + _Translations$explore$detail$pt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Título original'; + @override String get alsoKnownAs => 'Também conhecido como'; + @override String get studios => 'Estúdios'; + @override String get country => 'País'; + @override String get language => 'Idioma'; + @override String get released => 'Lançado'; + @override String get physicalRelease => 'Em disco'; + @override String get ended => 'Encerrado'; + @override String addedOn({required Object date}) => 'Adicionado em ${date}'; + @override String get yourRating => 'Sua avaliação'; + @override String get budget => 'Orçamento'; + @override String get revenue => 'Bilheteria'; + @override String get contentAdvisory => 'Classificação indicativa'; + @override String get tags => 'Tags'; + @override String get revealSpoilerTags => 'Mostrar tags de spoiler'; + @override String get links => 'Links'; + @override String get watchOn => 'Assistir em'; + @override String get watchTrailer => 'Ver trailer'; + @override String openOn({required Object site}) => 'Abrir em ${site}'; + @override String get crew => 'Equipe'; + @override String get ratings => 'Avaliações'; + @override String get schedule => 'Programação'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: 'Recomendado por ${n} usuário', + other: 'Recomendado por ${n} usuários', + ); + @override String recommendedBy({required Object who}) => 'Recomendado por ${who}'; + @override String favoritedBy({required Object who}) => 'Favoritado por ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} ainda não exibidos'; + @override String recommendedByPercent({required Object percent}) => 'Recomendado por ${percent} dos espectadores'; + @override String get relatedTitles => 'Títulos relacionados'; + @override String get background => 'Contexto'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$pt extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$pt._(TranslationsPt root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$pt extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsPt { 'auth.waitingForAuth' => 'Aguardando autenticação...\nEntre pelo navegador.', 'auth.useBrowser' => 'Usar navegador', 'auth.or' => 'ou', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Conectar ao ${product}', 'auth.useQuickConnect' => 'Usar Quick Connect', 'auth.quickConnectInstructions' => 'Abra o Quick Connect no Jellyfin e insira este código.', 'auth.quickConnectWaiting' => 'Aguardando aprovação…', @@ -2248,6 +2654,17 @@ extension on TranslationsPt { 'common.fullscreen' => 'Tela cheia', 'common.exitFullscreen' => 'Sair da tela cheia', 'common.pressBackAgainToExit' => 'Pressione voltar novamente para sair', + 'common.ratingSource.critic' => 'Críticos', + 'common.ratingSource.audience' => 'Público', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Críticos do Rotten Tomatoes', + 'common.ratingSource.rottenTomatoesAudience' => 'Público do Rotten Tomatoes', 'screens.licenses' => 'Licenças', 'screens.switchProfile' => 'Trocar Perfil', 'screens.subtitleStyling' => 'Estilo de Legendas', @@ -2284,6 +2701,7 @@ extension on TranslationsPt { 'settings.darkTheme' => 'Escuro', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Densidade da Biblioteca', + 'settings.displayScale' => 'Escala de exibição', 'settings.compact' => 'Compacto', 'settings.comfortable' => 'Confortável', 'settings.tvCornerSpotlightBackdrop' => 'Imagem de destaque no canto', @@ -2333,6 +2751,11 @@ extension on TranslationsPt { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => 'Automático (Recomendado)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB de memória disponível. Um buffer de ${size}MB pode afetar a reprodução.', + 'settings.playbackBuffer' => 'Buffer de reprodução', + 'settings.playbackBufferAuto' => 'Automático (recomendado)', + 'settings.playbackBufferLarge' => 'Grande', + 'settings.playbackBufferExtraLarge' => 'Extra grande', + 'settings.playbackBufferDescription' => 'Faz buffer extra contra conexões instáveis. Também limitado pelo tamanho do buffer.', 'settings.defaultQualityTitle' => 'Qualidade padrão', 'settings.musicQualityTitle' => 'Qualidade da música', 'settings.subtitleStyling' => 'Estilo de Legendas', @@ -2366,6 +2789,9 @@ extension on TranslationsPt { 'settings.debugLoggingDescription' => 'Ativar log detalhado para solução de problemas', 'settings.viewLogs' => 'Ver Logs', 'settings.viewLogsDescription' => 'Ver logs do app', + 'settings.clearImageCache' => 'Limpar cache de imagens', + 'settings.clearImageCacheDescription' => 'Limpar artes e miniaturas em cache. As imagens podem carregar mais devagar até serem baixadas novamente.', + 'settings.clearImageCacheSuccess' => 'Cache de imagens limpo com sucesso', 'settings.resetSettings' => 'Redefinir Configurações', 'settings.resetSettingsDescription' => 'Restaurar configurações padrão. Não pode ser desfeito.', 'settings.resetSettingsSuccess' => 'Configurações redefinidas com sucesso', @@ -2549,29 +2975,118 @@ extension on TranslationsPt { 'hotkeys.actions.skipMarker' => 'Pular introdução/créditos', 'hotkeys.actions.screenshot' => 'Capturar tela', 'fileInfo.title' => 'Informações do arquivo', + 'fileInfo.overview' => 'Visão geral', 'fileInfo.video' => 'Vídeo', 'fileInfo.audio' => 'Áudio', 'fileInfo.subtitles' => 'Legendas', + 'fileInfo.images' => 'Imagens incorporadas', + 'fileInfo.dataStreams' => 'Fluxos de dados', + 'fileInfo.lyrics' => 'Letras', 'fileInfo.file' => 'Arquivo', + 'fileInfo.attachments' => 'Anexos', + 'fileInfo.delivery' => 'Entrega', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Versão ${index} de ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Arquivo ${index} de ${count}', + 'fileInfo.noStreams' => 'O servidor não relatou fluxos para este arquivo.', + 'fileInfo.copyPath' => 'Copiar caminho', + 'fileInfo.pathCopied' => 'Caminho do arquivo copiado', 'fileInfo.codec' => 'Codec', + 'fileInfo.codecTag' => 'Tag do codec', 'fileInfo.resolution' => 'Resolução', + 'fileInfo.codedResolution' => 'Resolução codificada', 'fileInfo.bitrate' => 'Taxa de bits', 'fileInfo.frameRate' => 'Taxa de Quadros', + 'fileInfo.rotation' => 'Rotação', + 'fileInfo.comment' => 'Comentário', + 'fileInfo.audioDescription' => 'Descrição de áudio', + 'fileInfo.headerCompression' => 'Compactação de cabeçalho', + 'fileInfo.sidecarFile' => 'Arquivo sidecar', + 'fileInfo.transportTimestamp' => 'Carimbo de transporte', + 'fileInfo.displayOffset' => 'Deslocamento de exibição', + 'fileInfo.previewFailureCode' => 'Código de falha da pré-visualização', + 'fileInfo.previewRetries' => 'Tentativas da pré-visualização', 'fileInfo.aspectRatio' => 'Proporção', + 'fileInfo.pixelAspectRatio' => 'Proporção de aspecto de pixel', 'fileInfo.profile' => 'Perfil', + 'fileInfo.level' => 'Nível', 'fileInfo.bitDepth' => 'Profundidade de bits', + 'fileInfo.pixelFormat' => 'Formato de pixel', 'fileInfo.colorSpace' => 'Espaço de Cor', 'fileInfo.colorRange' => 'Faixa de Cor', 'fileInfo.colorPrimaries' => 'Primárias de Cor', + 'fileInfo.colorTransfer' => 'Transferência de cor', 'fileInfo.chromaSubsampling' => 'Subamostragem de Croma', + 'fileInfo.chromaLocation' => 'Localização do croma', + 'fileInfo.scanType' => 'Tipo de varredura', + 'fileInfo.interlaced' => 'Entrelaçado', + 'fileInfo.anamorphic' => 'Anamórfico', + 'fileInfo.referenceFrames' => 'Quadros de referência', + 'fileInfo.dynamicRange' => 'Faixa dinâmica', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Nível Dolby Vision', + 'fileInfo.dolbyVisionVersion' => 'Versão Dolby Vision', + 'fileInfo.dolbyVisionLayers' => 'Camadas Dolby Vision', + 'fileInfo.baseLayerCompatibility' => 'Compatibilidade da camada base', + 'fileInfo.avcBitstream' => 'Bitstream AVC', + 'fileInfo.nalLengthSize' => 'Tamanho do comprimento NAL', + 'fileInfo.scalingMatrix' => 'Matriz de dimensionamento personalizada', + 'fileInfo.streamIdentifier' => 'Identificador do fluxo', + 'fileInfo.streamIndex' => 'Índice do fluxo', + 'fileInfo.streamId' => 'ID do fluxo', + 'fileInfo.language' => 'Idioma', + 'fileInfo.languageCode' => 'Código do idioma', + 'fileInfo.streamTitle' => 'Título da faixa', 'fileInfo.channels' => 'Canais', + 'fileInfo.sampleRate' => 'Taxa de amostragem', + 'fileInfo.spatialAudio' => 'Áudio espacial', + 'fileInfo.textBased' => 'Baseado em texto', + 'fileInfo.subtitleFormat' => 'Formato sidecar', + 'fileInfo.provider' => 'Provedor', + 'fileInfo.matchScore' => 'Pontuação de correspondência', + 'fileInfo.externalDelivery' => 'Pode ser servido separadamente', + 'fileInfo.sidecarPath' => 'Caminho do sidecar', + 'fileInfo.sourceStream' => 'Copiado de', + 'fileInfo.temporary' => 'Temporário', + 'fileInfo.timeBase' => 'Base de tempo', 'fileInfo.overallBitrate' => 'Taxa de bits total', 'fileInfo.path' => 'Caminho', + 'fileInfo.fileName' => 'Nome do arquivo', 'fileInfo.size' => 'Tamanho', + 'fileInfo.totalSize' => 'Tamanho total', 'fileInfo.container' => 'Contêiner', 'fileInfo.duration' => 'Duração', + 'fileInfo.previewThumbnails' => 'Miniaturas de pré-visualização', + 'fileInfo.previewIndex' => 'Índice de pré-visualização', + 'fileInfo.packetLength' => 'Tamanho do pacote', + 'fileInfo.filePresent' => 'Arquivo presente', + 'fileInfo.fileReadable' => 'Legível pelo servidor', + 'fileInfo.streamPath' => 'Caminho do fluxo', 'fileInfo.optimizedForStreaming' => 'Otimizado para transmissão', 'fileInfo.has64bitOffsets' => 'Deslocamentos de 64 bits', + 'fileInfo.protocol' => 'Protocolo', + 'fileInfo.mediaType' => 'Tipo de mídia', + 'fileInfo.sourceKind' => 'Tipo de origem', + 'fileInfo.optimizedVersion' => 'Versão otimizada', + 'fileInfo.optimizationTarget' => 'Alvo de otimização', + 'fileInfo.deletedAt' => 'Excluído', + 'fileInfo.remoteSource' => 'Origem remota', + 'fileInfo.infiniteStream' => 'Fluxo infinito', + 'fileInfo.directPlay' => 'Reprodução direta', + 'fileInfo.directStream' => 'Fluxo direto', + 'fileInfo.transcoding' => 'Transcodificação', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'ID da versão', + 'fileInfo.fileId' => 'ID do arquivo', + 'fileInfo.defaultAudioTrack' => 'Faixa de áudio padrão', + 'fileInfo.defaultSubtitleTrack' => 'Faixa de legenda padrão', + 'fileInfo.subtitlesOff' => 'Desativadas', + 'fileInfo.flagDefault' => 'Padrão', + 'fileInfo.flagForced' => 'Forçada', + 'fileInfo.flagSelected' => 'Selecionada', + 'fileInfo.flagExternal' => 'Externa', + 'fileInfo.flagHearingImpaired' => 'Deficiência auditiva', + 'fileInfo.flagDub' => 'Dublada', + 'fileInfo.flagOriginal' => 'Original', 'mediaMenu.markAsWatched' => 'Marcar como Assistido', 'mediaMenu.markAsUnwatched' => 'Marcar como Não Assistido', 'mediaMenu.removeFromContinueWatching' => 'Remover de Continuar Assistindo', @@ -2580,7 +3095,28 @@ extension on TranslationsPt { 'mediaMenu.shufflePlay' => 'Reprodução Aleatória', 'mediaMenu.shuffleNotAvailableOffline' => 'Reprodução aleatória indisponível offline', 'mediaMenu.fileInfo' => 'Informações do arquivo', + 'mediaMenu.deleteEpisodeFromServer' => 'Excluir episódio do servidor', + 'mediaMenu.deleteSeasonFromServer' => 'Excluir temporada do servidor', + 'mediaMenu.deleteShowFromServer' => 'Excluir série do servidor', + 'mediaMenu.deleteMovieFromServer' => 'Excluir filme do servidor', + 'mediaMenu.deleteEpisodeTitle' => 'Excluir este episódio?', + 'mediaMenu.deleteSeasonTitle' => 'Excluir esta temporada?', + 'mediaMenu.deleteShowTitle' => 'Excluir esta série?', + 'mediaMenu.deleteMovieTitle' => 'Excluir este filme?', + 'mediaMenu.deleteEpisodeConfirm' => 'Excluir episódio', + 'mediaMenu.deleteSeasonConfirm' => 'Excluir temporada', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Excluir série', + 'mediaMenu.deleteMovieConfirm' => 'Excluir filme', + 'mediaMenu.deleteAnyway' => 'Excluir mesmo assim', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Excluir permanentemente ${title} do seu servidor?', 'mediaMenu.deleteMultipleWarning' => 'Isso inclui todos os episódios e seus arquivos.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: 'Isso exclui o ${n} episódio e o arquivo dele.', other: 'Isso exclui todos os ${n} episódios e os arquivos deles.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: 'Este item está armazenado como ${n} arquivo, que será excluído.', other: 'Este item está armazenado em ${n} arquivos, e todos eles serão excluídos.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: 'Mais ${n} episódio está armazenado no mesmo arquivo e também será excluído:', other: 'Mais ${n} episódios estão armazenados no mesmo arquivo e também serão excluídos:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'O Plezy não conseguiu verificar quais arquivos serão removidos, então pode excluir mais do que o item acima. Cancele e tente novamente, ou exclua mesmo assim.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Seu servidor não forneceu detalhes do arquivo para este item, então o Plezy não pode verificar quais arquivos serão removidos. Pode excluir mais do que o item acima.', 'mediaMenu.mediaDeletedSuccessfully' => 'Item de mídia excluído com sucesso', 'mediaMenu.mediaFailedToDelete' => 'Falha ao excluir item de mídia', 'mediaMenu.rate' => 'Avaliar', @@ -2646,6 +3182,9 @@ extension on TranslationsPt { 'videoControls.playNext' => 'Reproduzir Próximo', 'videoControls.playButton' => 'Reproduzir', 'videoControls.pauseButton' => 'Pausar', + 'videoControls.playbackPaused' => 'Pausado', + 'videoControls.playbackResumed' => 'Reproduzindo', + 'videoControls.loadingVideo' => 'Carregando vídeo', 'videoControls.showPlaybackControls' => 'Mostrar controles de reprodução', 'videoControls.hidePlaybackControls' => 'Ocultar controles de reprodução', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Retroceder ${seconds} segundos', @@ -2700,8 +3239,6 @@ extension on TranslationsPt { 'videoControls.subtitleDownloaded' => 'Legenda baixada', 'videoControls.subtitleDownloadedNotApplied' => 'A legenda foi baixada, mas não foi possível selecioná-la', 'videoControls.subtitleDownloadFailed' => 'Falha ao baixar legenda', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Pesquisar idiomas...', 'messages.markedAsWatched' => 'Marcado como assistido', 'messages.markedAsUnwatched' => 'Marcado como não assistido', @@ -2711,6 +3248,7 @@ extension on TranslationsPt { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: 'Removido automaticamente ${n} download assistido', other: 'Removidos automaticamente ${n} downloads assistidos', ), 'messages.removedFromContinueWatching' => 'Removido de Continuar assistindo', 'messages.errorLoading' => ({required Object error}) => 'Erro: ${error}', + 'messages.searchPartialResults' => 'Alguns servidores de mídia não puderam ser pesquisados. Exibindo os resultados disponíveis.', 'messages.streamInterrupted' => 'A transmissão foi interrompida. Pressione reproduzir ou avance para tentar novamente.', 'messages.liveStreamInterrupted' => 'A transmissão ao vivo foi interrompida. Pressione reproduzir para tentar novamente.', 'messages.fileInfoNotAvailable' => 'Informações do arquivo não disponíveis', @@ -2749,6 +3287,8 @@ extension on TranslationsPt { 'messages.switchingToCompatiblePlayer' => 'Alternando para um reprodutor compatível...', 'messages.serverLimitTitle' => 'Falha na reprodução', 'messages.serverLimitBody' => 'Erro do servidor (HTTP 500). Um limite de largura de banda ou transcodificação provavelmente rejeitou esta sessão. Peça ao proprietário do servidor para ajustá-lo.', + 'messages.mediaUnreadableTitle' => 'Arquivo indisponível', + 'messages.mediaUnreadableBody' => 'O servidor encontrou este item, mas não conseguiu ler o arquivo (HTTP 404). O arquivo provavelmente foi movido, excluído ou o armazenamento está offline. Peça ao responsável pelo servidor para verificar o arquivo e reexaminar a biblioteca.', 'messages.logsUploaded' => 'Logs enviados', 'messages.logsUploadFailed' => 'Falha ao enviar logs', 'messages.logId' => 'ID do log', @@ -2857,6 +3397,8 @@ extension on TranslationsPt { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sessão de ${name} expirada', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sessões expiradas em ${count} servidores', 'connections.signInAgain' => 'Entrar novamente', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Editar conexão do ${product}', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Adicione ou remova URLs para ${serverName}. O Plezy usará a URL acessível com menor latência.', 'discover.title' => 'Descobrir', 'discover.noContentAvailable' => 'Nenhum conteúdo disponível', 'discover.addMediaToLibraries' => 'Adicione mídias às suas bibliotecas', @@ -2882,6 +3424,7 @@ extension on TranslationsPt { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min restantes', 'discover.moreLikeThis' => 'Títulos semelhantes', 'errors.searchFailed' => ({required Object error}) => 'Falha na busca: ${error}', + 'errors.searchUnavailable' => 'A busca não conseguiu alcançar nenhum servidor de mídia.', 'errors.connectionTimeout' => ({required Object context}) => 'Tempo de conexão esgotado ao carregar ${context}', 'errors.connectionFailed' => 'Não foi possível conectar ao servidor de mídia', 'errors.unableToLoad' => ({required Object context}) => 'Não foi possível carregar ${context}. Tente novamente.', @@ -2989,6 +3532,36 @@ extension on TranslationsPt { 'logs.clearLogs' => 'Limpar Logs', 'logs.copyLogs' => 'Copiar Logs', 'logs.uploadLogs' => 'Enviar Logs', + 'startup.failedTitle' => 'O Plezy não conseguiu iniciar', + 'startup.failedBody' => 'Algo deu errado durante a inicialização. Os detalhes abaixo identificam o que falhou.', + 'startup.failedBodyRepairable' => 'O arquivo de configurações salvo do Plezy está danificado e precisa ser reconstruído antes que o Plezy possa iniciar. Tentar novamente não vai ajudar — escolha Reparar armazenamento.', + 'startup.phaseLabel' => 'Etapa', + 'startup.showDetails' => 'Mostrar detalhes', + 'startup.hideDetails' => 'Ocultar detalhes', + 'startup.copyDetails' => 'Copiar detalhes', + 'startup.detailsCopied' => 'Detalhes copiados para a área de transferência', + 'startup.uploadDetails' => 'Enviar detalhes', + 'startup.repairStorage' => 'Reparar armazenamento', + 'startup.repairTitle' => 'Reparar dados armazenados?', + 'startup.repairBodyCommon' => 'O arquivo de configurações do Plezy está danificado e não pode ser lido. Reparar redefine todas as configurações para o padrão.', + 'startup.repairBodyOneCredential' => 'Um login salvo está danificado e não pode ser lido. Reparar remove apenas ele; suas outras configurações permanecem intactas.', + 'startup.repairBodySignInsKept' => 'Seus servidores e perfis devem permanecer conectados.', + 'startup.repairBodySignInsLost' => 'A chave que protege seus logins salvos não pode ser recuperada deste arquivo, então você terá que entrar novamente em todos os servidores e perfis. Nada no seu servidor de mídia é afetado.', + 'startup.repairBodySessionsUncertain' => 'Os rastreadores (MAL, AniList, Simkl, Trakt) e o Seerr são armazenados separadamente e podem ou não ser preservados. O Plezy informará exatamente o que foi mantido.', + 'startup.repairConfirm' => 'Reparar', + 'startup.repairSucceeded' => 'Armazenamento reparado', + 'startup.repairNeedsRestart' => 'Armazenamento reparado — reinício necessário', + 'startup.restartRequiredBody' => 'Seus dados foram reparados, mas o Plezy precisa iniciar do zero antes de usá-los. Feche o Plezy e abra-o novamente.', + 'startup.quitPlezy' => 'Sair do Plezy', + 'startup.repairFailed' => 'Falha no reparo', + 'startup.repairKeptSignIns' => 'Seus servidores e perfis ainda estão conectados.', + 'startup.repairLostSignIns' => 'A chave que protege seus logins salvos não pôde ser recuperada. Você terá que entrar novamente em todos os servidores e perfis.', + 'startup.repairLostSessions' => 'Pelo menos uma conexão de rastreador ou do Seerr foi perdida e precisa ser reconectada.', + 'startup.backupTitle' => 'Uma cópia do arquivo danificado foi mantida', + 'startup.backupWarning' => 'Ele contém suas credenciais de login. Não envie nem compartilhe.', + 'startup.deleteBackup' => 'Excluir cópia', + 'startup.backupDeleted' => 'Cópia excluída.', + 'startup.previousFailureTitle' => 'O Plezy falhou ao iniciar da última vez', 'licenses.relatedPackages' => 'Pacotes Relacionados', 'licenses.license' => 'Licença', 'licenses.licenseNumber' => ({required Object number}) => 'Licença ${number}', @@ -3032,6 +3605,113 @@ extension on TranslationsPt { 'explore.searchEmpty' => ({required Object query}) => 'Nenhum resultado para "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Busque filmes e séries em ${source}.', 'explore.searchFailed' => 'Falha na busca. Verifique sua conexão e tente novamente.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} popular', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} no ar', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} avaliado', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} favoritado', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} em alta', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} em ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} assistindo', + 'explore.badge.available' => 'Disponível', + 'explore.badge.partiallyAvailable' => 'Parcialmente disponível', + 'explore.badge.availableIn4k' => '4K disponível', + 'explore.badge.requested' => 'Solicitado', + 'explore.badge.pendingApproval' => 'Aguardando aprovação', + 'explore.badge.processing' => 'Processando', + 'explore.badge.declined' => 'Recusado', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Falha na solicitação', + 'explore.badge.requested4k' => '4K solicitado', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} temporadas', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Ep ${episode} em ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Próximo em ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} epps', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/ep', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} listados', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} assistiram hoje', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} assistiram esta semana', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} assistiram este mês', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} assistiram este ano', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} espectadores', + 'explore.stats.planning' => ({required Object n}) => '${n} pretendem assistir', + 'explore.stats.favorited' => ({required Object n}) => '${n} favoritos', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} abandonaram', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: '${n} comentário', other: '${n} comentários', ), + 'explore.stats.votes' => ({required Object n}) => '${n} votos', + 'explore.stats.watching' => ({required Object n}) => '${n} assistindo', + 'explore.stats.completed' => ({required Object n}) => '${n} concluíram', + 'explore.stats.onHold' => ({required Object n}) => '${n} em pausa', + 'explore.stats.dropped' => ({required Object n}) => '${n} abandonaram', + 'explore.season.winter' => 'Inverno', + 'explore.season.spring' => 'Primavera', + 'explore.season.summer' => 'Verão', + 'explore.season.fall' => 'Outono', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'Curta de TV', + 'explore.format.movie' => 'Filme', + 'explore.format.special' => 'Especial', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Música', + 'explore.format.other' => 'Outro', + 'explore.sourceMaterial.original' => 'Original', + 'explore.sourceMaterial.manga' => 'Mangá', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Romance', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Jogo', + 'explore.sourceMaterial.webComic' => 'Webcomic', + 'explore.sourceMaterial.musicRelease' => 'Música', + 'explore.sourceMaterial.otherMedia' => 'Outro', + 'explore.creditRole.director' => 'Diretor', + 'explore.creditRole.writer' => 'Roteirista', + 'explore.creditRole.producer' => 'Produtor', + 'explore.creditRole.creator' => 'Criador', + 'explore.creditRole.composer' => 'Compositor', + 'explore.relation.prequel' => 'Prequela', + 'explore.relation.sequel' => 'Sequela', + 'explore.relation.sideStory' => 'História paralela', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Versão alternativa', + 'explore.relation.summary' => 'Resumo', + 'explore.relation.parentStory' => 'História principal', + 'explore.relation.adaptation' => 'Adaptação', + 'explore.relation.other' => 'Relacionado', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Vai ao ar ${day} às ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Vai ao ar ${day} às ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Título original', + 'explore.detail.alsoKnownAs' => 'Também conhecido como', + 'explore.detail.studios' => 'Estúdios', + 'explore.detail.country' => 'País', + 'explore.detail.language' => 'Idioma', + 'explore.detail.released' => 'Lançado', + 'explore.detail.physicalRelease' => 'Em disco', + 'explore.detail.ended' => 'Encerrado', + 'explore.detail.addedOn' => ({required Object date}) => 'Adicionado em ${date}', + 'explore.detail.yourRating' => 'Sua avaliação', + 'explore.detail.budget' => 'Orçamento', + 'explore.detail.revenue' => 'Bilheteria', + 'explore.detail.contentAdvisory' => 'Classificação indicativa', + 'explore.detail.tags' => 'Tags', + 'explore.detail.revealSpoilerTags' => 'Mostrar tags de spoiler', + 'explore.detail.links' => 'Links', + 'explore.detail.watchOn' => 'Assistir em', + 'explore.detail.watchTrailer' => 'Ver trailer', + 'explore.detail.openOn' => ({required Object site}) => 'Abrir em ${site}', + 'explore.detail.crew' => 'Equipe', + 'explore.detail.ratings' => 'Avaliações', + 'explore.detail.schedule' => 'Programação', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: 'Recomendado por ${n} usuário', other: 'Recomendado por ${n} usuários', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Recomendado por ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Favoritado por ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} ainda não exibidos', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Recomendado por ${percent} dos espectadores', + 'explore.detail.relatedTitles' => 'Títulos relacionados', + 'explore.detail.background' => 'Contexto', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: '${n} resultado', other: '${n} resultados', ), 'liveTv.title' => 'TV ao Vivo', 'liveTv.guide' => 'Guia', 'liveTv.noChannels' => 'Nenhum canal disponível', @@ -3214,8 +3894,6 @@ extension on TranslationsPt { 'watchTogether.relayUnreachable' => 'Servidor de retransmissão inacessível. O bloqueio pelo provedor de internet pode impedir o uso do Assistir Juntos.', 'watchTogether.reconnectingToHost' => 'Reconectando ao anfitrião...', 'watchTogether.currentPlayback' => 'Reprodução atual', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Entrar na reprodução atual', 'watchTogether.joinCurrentPlaybackDescription' => 'Voltar ao conteúdo que o anfitrião está assistindo agora', 'watchTogether.failedToOpenCurrentPlayback' => 'Falha ao abrir a reprodução atual', @@ -3284,9 +3962,15 @@ extension on TranslationsPt { 'downloads.editSyncRule' => 'Editar regra de sincronização', 'downloads.removeSyncRule' => 'Remover regra de sincronização', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Parar de sincronizar "${title}"? Os episódios baixados serão mantidos.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Parar a sincronização de "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Também excluir downloads associados', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Downloads usados por outra regra de sincronização ou perfil serão mantidos.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Regra de sincronização criada — mantendo ${count} episódios não assistidos', 'downloads.syncRuleUpdated' => 'Regra de sincronização atualizada', 'downloads.syncRuleRemoved' => 'Regra de sincronização removida', + 'downloads.syncRuleAndDownloadsRemoved' => 'Regra de sincronização e downloads associados removidos', + 'downloads.syncRuleCleanupBusy' => 'As regras de sincronização estão sendo atualizadas. Tente novamente em instantes.', + 'downloads.syncRuleCleanupUnavailable' => 'Os downloads associados não puderam ser identificados com segurança. Reconecte o servidor e tente novamente, ou remova a regra sem excluir os downloads.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} novos episódios sincronizados para ${title}', 'downloads.activeSyncRules' => 'Regras de sincronização', 'downloads.noSyncRules' => 'Nenhuma regra de sincronização', @@ -3449,6 +4133,8 @@ extension on TranslationsPt { 'performanceOverlay.dvRpus' => 'DV RPUs', 'performanceOverlay.dvRpuAverage' => 'Média DV RPU', 'performanceOverlay.dvSampleAverage' => 'Média amostra DV', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Luma máx.', 'performanceOverlay.minLuma' => 'Luma mín.', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsPt { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Ativar o Plezy no ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Acesse ${url} e insira este código:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Abrir ${service} para ativar', @@ -3641,9 +4328,12 @@ extension on TranslationsPt { 'services.libraryFilter.modeHintWhitelist' => 'Sincronizar apenas as bibliotecas marcadas abaixo.', 'services.libraryFilter.libraries' => 'Bibliotecas', 'services.libraryFilter.noLibraries' => 'Nenhuma biblioteca disponível', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Adicionar servidor ${product}', 'addServer.serverUrls' => 'URLs do servidor', 'addServer.serverUrlsHelper' => 'Várias URLs são permitidas, separadas por vírgulas.', 'addServer.findServer' => 'Encontrar servidor', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Procurando servidores ${product} locais...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Servidores ${product} locais', 'addServer.username' => 'Usuário', 'addServer.password' => 'Senha', 'addServer.signIn' => 'Entrar', @@ -3655,11 +4345,15 @@ extension on TranslationsPt { 'addServer.addPlexTitle' => 'Entrar com Plex', 'addServer.pinExpired' => 'O PIN expirou antes de entrar. Tente novamente.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Falha ao registrar a conta: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Digite a URL do seu servidor ${product}', 'addServer.addConnectionTitle' => 'Adicionar conexão', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Adicionar a ${name}', 'addServer.signInWithPlexCard' => 'Entrar com Plex', 'addServer.signInWithPlexCardSubtitle' => 'Autorize este dispositivo. Servidores compartilhados são adicionados.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Autorize uma conta Plex. Os usuários do Plex Home se tornam perfis.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Conectar ao ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Digite a URL do servidor, o nome de usuário e a senha.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Entre no seu servidor ${product}. Vinculado a ${name}.', 'addServer.borrowFromAnotherProfile' => 'Pegar emprestado de outro perfil', 'addServer.borrowFromAnotherProfileSubtitle' => 'Reutilize a conexão de outro perfil. Perfis protegidos por PIN exigem PIN.', _ => null, diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index 0fc18369..e3f4c60e 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -67,6 +67,7 @@ class TranslationsRu extends Translations with BaseTranslations 'Ожидание аутентификации...\nВыполните вход в браузере.'; @override String get useBrowser => 'Использовать браузер'; @override String get or => 'или'; + @override String connectToMediaBrowser({required Object product}) => 'Подключиться к ${product}'; @override String get useQuickConnect => 'Использовать Quick Connect'; @override String get quickConnectInstructions => 'Откройте Quick Connect в Jellyfin и введите этот код.'; @override String get quickConnectWaiting => 'Ожидание подтверждения…'; @@ -175,6 +177,7 @@ class _Translations$common$ru extends Translations$common$en { @override String get fullscreen => 'Полноэкранный режим'; @override String get exitFullscreen => 'Выйти из полноэкранного режима'; @override String get pressBackAgainToExit => 'Нажмите ещё раз для выхода'; + @override late final _Translations$common$ratingSource$ru ratingSource = _Translations$common$ratingSource$ru._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$ru extends Translations$settings$en { @override String get darkTheme => 'Тёмная'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Плотность библиотеки'; + @override String get displayScale => 'Масштаб отображения'; @override String get compact => 'Компактный'; @override String get comfortable => 'Комфортный'; @override String get tvCornerSpotlightBackdrop => 'Фоновое изображение в углу'; @@ -287,6 +291,11 @@ class _Translations$settings$ru extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}МБ'; @override String get bufferSizeAuto => 'Авто (Рекомендуется)'; @override String bufferSizeWarning({required Object heap, required Object size}) => 'Доступно памяти: ${heap} МБ. Буфер размером ${size} МБ может повлиять на воспроизведение.'; + @override String get playbackBuffer => 'Буфер воспроизведения'; + @override String get playbackBufferAuto => 'Авто (рекомендуется)'; + @override String get playbackBufferLarge => 'Большой'; + @override String get playbackBufferExtraLarge => 'Очень большой'; + @override String get playbackBufferDescription => 'Буферизирует больше при нестабильном соединении. Также ограничено размером буфера.'; @override String get defaultQualityTitle => 'Качество по умолчанию'; @override String get musicQualityTitle => 'Качество музыки'; @override String get subtitleStyling => 'Стиль субтитров'; @@ -320,6 +329,9 @@ class _Translations$settings$ru extends Translations$settings$en { @override String get debugLoggingDescription => 'Включить подробное журналирование для устранения неполадок'; @override String get viewLogs => 'Просмотр логов'; @override String get viewLogsDescription => 'Просмотр логов приложения'; + @override String get clearImageCache => 'Очистить кэш изображений'; + @override String get clearImageCacheDescription => 'Очистить кэшированные обложки и миниатюры. Изображения могут загружаться медленнее, пока не будут загружены снова.'; + @override String get clearImageCacheSuccess => 'Кэш изображений успешно очищен'; @override String get resetSettings => 'Сбросить настройки'; @override String get resetSettingsDescription => 'Восстановить настройки по умолчанию. Это нельзя отменить.'; @override String get resetSettingsSuccess => 'Настройки успешно сброшены'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$ru extends Translations$fileInfo$en { // Translations @override String get title => 'Информация о файле'; + @override String get overview => 'Обзор'; @override String get video => 'Видео'; @override String get audio => 'Аудио'; @override String get subtitles => 'Субтитры'; + @override String get images => 'Встроенные изображения'; + @override String get dataStreams => 'Потоки данных'; + @override String get lyrics => 'Текст песни'; @override String get file => 'Файл'; + @override String get attachments => 'Вложения'; + @override String get delivery => 'Доставка'; + @override String versionCounter({required Object index, required Object count}) => 'Версия ${index} из ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Файл ${index} из ${count}'; + @override String get noStreams => 'Сервер не сообщил о потоках для этого файла.'; + @override String get copyPath => 'Копировать путь'; + @override String get pathCopied => 'Путь к файлу скопирован'; @override String get codec => 'Кодек'; + @override String get codecTag => 'Тег кодека'; @override String get resolution => 'Разрешение'; + @override String get codedResolution => 'Кодированное разрешение'; @override String get bitrate => 'Битрейт'; @override String get frameRate => 'Частота кадров'; + @override String get rotation => 'Поворот'; + @override String get comment => 'Комментарий'; + @override String get audioDescription => 'Аудиоописание'; + @override String get headerCompression => 'Сжатие заголовков'; + @override String get sidecarFile => 'Файл-спутник'; + @override String get transportTimestamp => 'Метка времени транспорта'; + @override String get displayOffset => 'Смещение отображения'; + @override String get previewFailureCode => 'Код ошибки превью'; + @override String get previewRetries => 'Повторные попытки превью'; @override String get aspectRatio => 'Соотношение сторон'; + @override String get pixelAspectRatio => 'Попиксельное соотношение сторон'; @override String get profile => 'Профиль'; + @override String get level => 'Уровень'; @override String get bitDepth => 'Глубина цвета'; + @override String get pixelFormat => 'Формат пикселей'; @override String get colorSpace => 'Цветовое пространство'; @override String get colorRange => 'Цветовой диапазон'; @override String get colorPrimaries => 'Основные цвета'; + @override String get colorTransfer => 'Передача цвета'; @override String get chromaSubsampling => 'Субдискретизация цветности'; + @override String get chromaLocation => 'Расположение цветности'; + @override String get scanType => 'Тип развёртки'; + @override String get interlaced => 'Чересстрочный'; + @override String get anamorphic => 'Анаморфный'; + @override String get referenceFrames => 'Опорные кадры'; + @override String get dynamicRange => 'Динамический диапазон'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Уровень Dolby Vision'; + @override String get dolbyVisionVersion => 'Версия Dolby Vision'; + @override String get dolbyVisionLayers => 'Слои Dolby Vision'; + @override String get baseLayerCompatibility => 'Совместимость базового слоя'; + @override String get avcBitstream => 'Битовый поток AVC'; + @override String get nalLengthSize => 'Размер длины NAL'; + @override String get scalingMatrix => 'Пользовательская матрица масштабирования'; + @override String get streamIdentifier => 'Идентификатор потока'; + @override String get streamIndex => 'Индекс потока'; + @override String get streamId => 'ID потока'; + @override String get language => 'Язык'; + @override String get languageCode => 'Код языка'; + @override String get streamTitle => 'Название дорожки'; @override String get channels => 'Каналы'; + @override String get sampleRate => 'Частота дискретизации'; + @override String get spatialAudio => 'Пространственное аудио'; + @override String get textBased => 'Текстовый'; + @override String get subtitleFormat => 'Формат файла-спутника'; + @override String get provider => 'Провайдер'; + @override String get matchScore => 'Оценка совпадения'; + @override String get externalDelivery => 'Может передаваться отдельно'; + @override String get sidecarPath => 'Путь к файлу-спутнику'; + @override String get sourceStream => 'Скопировано из'; + @override String get temporary => 'Временный'; + @override String get timeBase => 'Временная база'; @override String get overallBitrate => 'Общий битрейт'; @override String get path => 'Путь'; + @override String get fileName => 'Имя файла'; @override String get size => 'Размер'; + @override String get totalSize => 'Общий размер'; @override String get container => 'Контейнер'; @override String get duration => 'Длительность'; + @override String get previewThumbnails => 'Миниатюры превью'; + @override String get previewIndex => 'Индекс превью'; + @override String get packetLength => 'Длина пакета'; + @override String get filePresent => 'Файл присутствует'; + @override String get fileReadable => 'Доступен для чтения сервером'; + @override String get streamPath => 'Путь потока'; @override String get optimizedForStreaming => 'Оптимизировано для потоковой передачи'; @override String get has64bitOffsets => '64-битные смещения'; + @override String get protocol => 'Протокол'; + @override String get mediaType => 'Тип медиа'; + @override String get sourceKind => 'Тип источника'; + @override String get optimizedVersion => 'Оптимизированная версия'; + @override String get optimizationTarget => 'Цель оптимизации'; + @override String get deletedAt => 'Удалено'; + @override String get remoteSource => 'Удалённый источник'; + @override String get infiniteStream => 'Бесконечный поток'; + @override String get directPlay => 'Прямое воспроизведение'; + @override String get directStream => 'Прямой поток'; + @override String get transcoding => 'Транскодирование'; + @override String get etag => 'ETag'; + @override String get versionId => 'ID версии'; + @override String get fileId => 'ID файла'; + @override String get defaultAudioTrack => 'Аудиодорожка по умолчанию'; + @override String get defaultSubtitleTrack => 'Дорожка субтитров по умолчанию'; + @override String get subtitlesOff => 'Выкл.'; + @override String get flagDefault => 'По умолчанию'; + @override String get flagForced => 'Принудительная'; + @override String get flagSelected => 'Выбрана'; + @override String get flagExternal => 'Внешняя'; + @override String get flagHearingImpaired => 'Для слабослышащих'; + @override String get flagDub => 'Дубляж'; + @override String get flagOriginal => 'Оригинал'; } // Path: mediaMenu @@ -546,7 +647,41 @@ class _Translations$mediaMenu$ru extends Translations$mediaMenu$en { @override String get shufflePlay => 'Случайное воспроизведение'; @override String get shuffleNotAvailableOffline => 'Перемешивание недоступно офлайн'; @override String get fileInfo => 'Информация о файле'; + @override String get deleteEpisodeFromServer => 'Удалить эпизод с сервера'; + @override String get deleteSeasonFromServer => 'Удалить сезон с сервера'; + @override String get deleteShowFromServer => 'Удалить сериал с сервера'; + @override String get deleteMovieFromServer => 'Удалить фильм с сервера'; + @override String get deleteEpisodeTitle => 'Удалить этот эпизод?'; + @override String get deleteSeasonTitle => 'Удалить этот сезон?'; + @override String get deleteShowTitle => 'Удалить этот сериал?'; + @override String get deleteMovieTitle => 'Удалить этот фильм?'; + @override String get deleteEpisodeConfirm => 'Удалить эпизод'; + @override String get deleteSeasonConfirm => 'Удалить сезон'; + @override String get deleteShowConfirm => 'Удалить сериал'; + @override String get deleteMovieConfirm => 'Удалить фильм'; + @override String get deleteAnyway => 'Всё равно удалить'; + @override String confirmDeleteTarget({required Object title}) => 'Навсегда удалить ${title} с вашего сервера?'; @override String get deleteMultipleWarning => 'Это включает все эпизоды и их файлы.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: 'Это удалит содержащийся в нём ${n} эпизод и его файл.', + few: 'Это удалит содержащиеся в нём ${n} эпизода и их файлы.', + many: 'Это удалит содержащиеся в нём ${n} эпизодов и их файлы.', + other: 'Это удалит содержащиеся в нём ${n} эпизодов и их файлы.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: 'Этот элемент хранится как ${n} файл, который будет удалён.', + few: 'Этот элемент хранится в ${n} файлах, и все они будут удалены.', + many: 'Этот элемент хранится в ${n} файлах, и все они будут удалены.', + other: 'Этот элемент хранится в ${n} файлах, и все они будут удалены.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: 'В этом же файле хранится ещё ${n} эпизод, и он тоже будет удалён:', + few: 'В этом же файле хранятся ещё ${n} эпизода, и они тоже будут удалены:', + many: 'В этом же файле хранятся ещё ${n} эпизодов, и они тоже будут удалены:', + other: 'В этом же файле хранятся ещё ${n} эпизодов, и они тоже будут удалены:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy не смог проверить, какие файлы будут удалены, поэтому может быть удалено больше, чем указанный выше элемент. Отмените и попробуйте снова либо удалите в любом случае.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Ваш сервер не предоставил сведения о файлах для этого элемента, поэтому Plezy не может проверить, какие файлы будут удалены. Может быть удалено больше, чем указанный выше элемент.'; @override String get mediaDeletedSuccessfully => 'Медиаэлемент успешно удалён'; @override String get mediaFailedToDelete => 'Не удалось удалить медиаэлемент'; @override String get rate => 'Оценить'; @@ -657,6 +792,9 @@ class _Translations$videoControls$ru extends Translations$videoControls$en { @override String get playNext => 'Следующее'; @override String get playButton => 'Воспроизвести'; @override String get pauseButton => 'Пауза'; + @override String get playbackPaused => 'На паузе'; + @override String get playbackResumed => 'Воспроизведение'; + @override String get loadingVideo => 'Загрузка видео'; @override String get showPlaybackControls => 'Показать элементы управления воспроизведением'; @override String get hidePlaybackControls => 'Скрыть элементы управления воспроизведением'; @override String seekBackwardButton({required Object seconds}) => 'Перемотать назад на ${seconds} с'; @@ -728,6 +866,7 @@ class _Translations$messages$ru extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Удалено из «Продолжить просмотр»'; @override String errorLoading({required Object error}) => 'Ошибка: ${error}'; + @override String get searchPartialResults => 'Поиск по некоторым медиасерверам не удался. Показываем доступные результаты.'; @override String get streamInterrupted => 'Поток прервался. Нажмите «Воспроизвести» или перемотайте, чтобы повторить попытку.'; @override String get liveStreamInterrupted => 'Прямая трансляция прервалась. Нажмите «Воспроизвести», чтобы повторить попытку.'; @override String get fileInfoNotAvailable => 'Информация о файле недоступна'; @@ -766,6 +905,8 @@ class _Translations$messages$ru extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Переключение на совместимый плеер...'; @override String get serverLimitTitle => 'Ошибка воспроизведения'; @override String get serverLimitBody => 'Ошибка сервера (HTTP 500). Лимит пропускной способности/транскодирования, вероятно, отклонил сессию. Попросите владельца изменить настройки.'; + @override String get mediaUnreadableTitle => 'Файл недоступен'; + @override String get mediaUnreadableBody => 'Сервер нашёл этот элемент, но не смог прочитать его файл (HTTP 404). Вероятно, файл был перемещён, удалён или его хранилище недоступно. Попросите владельца сервера проверить файл и пересканировать библиотеку.'; @override String get logsUploaded => 'Логи загружены'; @override String get logsUploadFailed => 'Не удалось загрузить логи'; @override String get logId => 'ID лога'; @@ -919,6 +1060,8 @@ class _Translations$connections$ru extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Сессия истекла для ${name}'; @override String sessionExpiredMany({required Object count}) => 'Сессия истекла для ${count} серверов'; @override String get signInAgain => 'Войти снова'; + @override String editMediaBrowserTitle({required Object product}) => 'Изменить подключение ${product}'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Добавьте или удалите URL-адреса для ${serverName}. Plezy будет использовать доступный URL с наименьшей задержкой.'; } // Path: discover @@ -962,6 +1105,7 @@ class _Translations$errors$ru extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Ошибка поиска: ${error}'; + @override String get searchUnavailable => 'Поиску не удалось связаться ни с одним медиасервером.'; @override String connectionTimeout({required Object context}) => 'Таймаут подключения при загрузке ${context}'; @override String get connectionFailed => 'Не удалось подключиться к медиасерверу'; @override String unableToLoad({required Object context}) => 'Не удалось загрузить ${context}. Повторите попытку.'; @@ -1079,6 +1223,45 @@ class _Translations$logs$ru extends Translations$logs$en { @override String get uploadLogs => 'Загрузить логи'; } +// Path: startup +class _Translations$startup$ru extends Translations$startup$en { + _Translations$startup$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy не удалось запустить'; + @override String get failedBody => 'Во время запуска что-то пошло не так. Сведения ниже показывают, что именно не удалось.'; + @override String get failedBodyRepairable => 'Сохранённый файл настроек Plezy повреждён, и его необходимо пересоздать, прежде чем Plezy сможет запуститься. Повторные попытки не помогут — выберите «Восстановить хранилище».'; + @override String get phaseLabel => 'Шаг'; + @override String get showDetails => 'Показать сведения'; + @override String get hideDetails => 'Скрыть сведения'; + @override String get copyDetails => 'Копировать сведения'; + @override String get detailsCopied => 'Сведения скопированы в буфер обмена'; + @override String get uploadDetails => 'Отправить сведения'; + @override String get repairStorage => 'Восстановить хранилище'; + @override String get repairTitle => 'Восстановить сохранённые данные?'; + @override String get repairBodyCommon => 'Файл настроек Plezy повреждён и не может быть прочитан. Восстановление сбросит все настройки к значениям по умолчанию.'; + @override String get repairBodyOneCredential => 'Одна сохранённая учётная запись повреждена и не может быть прочитана. Восстановление удалит только её; остальные настройки не будут затронуты.'; + @override String get repairBodySignInsKept => 'Вход в ваши серверы и профили будет сохранён.'; + @override String get repairBodySignInsLost => 'Ключ, защищающий сохранённые входы, невозможно восстановить из этого файла, поэтому вам придётся снова войти на каждый сервер и в каждый профиль. На вашем медиасервере ничего не изменится.'; + @override String get repairBodySessionsUncertain => 'Трекеры (MAL, AniList, Simkl, Trakt) и Seerr хранятся отдельно и могут сохраниться или нет. Plezy точно сообщит, что удалось сохранить.'; + @override String get repairConfirm => 'Восстановить'; + @override String get repairSucceeded => 'Хранилище восстановлено'; + @override String get repairNeedsRestart => 'Хранилище восстановлено — требуется перезапуск'; + @override String get restartRequiredBody => 'Ваши данные были восстановлены, но Plezy должен запуститься заново, чтобы использовать их. Закройте Plezy и откройте его снова.'; + @override String get quitPlezy => 'Выйти из Plezy'; + @override String get repairFailed => 'Не удалось восстановить'; + @override String get repairKeptSignIns => 'Ваши серверы и профили по-прежнему в системе.'; + @override String get repairLostSignIns => 'Ключ, защищающий сохранённые входы, не удалось восстановить. Вам придётся снова войти на каждый сервер и в каждый профиль.'; + @override String get repairLostSessions => 'Потеряно как минимум одно подключение трекера или Seerr — его нужно восстановить.'; + @override String get backupTitle => 'Сохранена копия повреждённого файла'; + @override String get backupWarning => 'Она содержит ваши учётные данные для входа. Не загружайте и не передавайте её.'; + @override String get deleteBackup => 'Удалить копию'; + @override String get backupDeleted => 'Копия удалена.'; + @override String get previousFailureTitle => 'В прошлый раз Plezy не удалось запустить'; +} + // Path: licenses class _Translations$licenses$ru extends Translations$licenses$en { _Translations$licenses$ru._(TranslationsRu root) : this._root = root, super.internal(root); @@ -1101,7 +1284,7 @@ class _Translations$navigation$ru extends Translations$navigation$en { // Translations @override String get libraries => 'Библиотеки'; @override String get downloads => 'Загрузки'; - @override String get liveTv => 'ТВ в прямом эфире'; + @override String get liveTv => 'Прямой эфир'; @override String get explore => 'Обзор'; } @@ -1136,6 +1319,22 @@ class _Translations$explore$ru extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Нет результатов по запросу "${query}"'; @override String searchPrompt({required Object source}) => 'Ищите фильмы и сериалы в ${source}.'; @override String get searchFailed => 'Ошибка поиска. Проверьте подключение и повторите попытку.'; + @override late final _Translations$explore$badge$ru badge = _Translations$explore$badge$ru._(_root); + @override late final _Translations$explore$stats$ru stats = _Translations$explore$stats$ru._(_root); + @override late final _Translations$explore$season$ru season = _Translations$explore$season$ru._(_root); + @override late final _Translations$explore$format$ru format = _Translations$explore$format$ru._(_root); + @override late final _Translations$explore$sourceMaterial$ru sourceMaterial = _Translations$explore$sourceMaterial$ru._(_root); + @override late final _Translations$explore$creditRole$ru creditRole = _Translations$explore$creditRole$ru._(_root); + @override late final _Translations$explore$relation$ru relation = _Translations$explore$relation$ru._(_root); + @override String broadcast({required Object day, required Object time}) => 'Выходит ${day} в ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Выходит ${day} в ${time} ${timezone}'; + @override late final _Translations$explore$detail$ru detail = _Translations$explore$detail$ru._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: '${n} результат', + few: '${n} результата', + many: '${n} результатов', + other: '${n} результатов', + ); } // Path: liveTv @@ -1445,9 +1644,15 @@ class _Translations$downloads$ru extends Translations$downloads$en { @override String get editSyncRule => 'Редактировать правило синхронизации'; @override String get removeSyncRule => 'Удалить правило синхронизации'; @override String removeSyncRuleConfirm({required Object title}) => 'Прекратить синхронизацию «${title}»? Скачанные эпизоды будут сохранены.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Прекратить синхронизацию "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Также удалить связанные загрузки'; + @override String get deleteSyncRuleDownloadsDescription => 'Загрузки, используемые другим правилом синхронизации или профилем, будут сохранены.'; @override String syncRuleCreated({required Object count}) => 'Правило синхронизации создано — хранится ${count} непросмотренных эпизодов'; @override String get syncRuleUpdated => 'Правило синхронизации обновлено'; @override String get syncRuleRemoved => 'Правило синхронизации удалено'; + @override String get syncRuleAndDownloadsRemoved => 'Правило синхронизации и связанные загрузки удалены'; + @override String get syncRuleCleanupBusy => 'Правила синхронизации сейчас обновляются. Попробуйте снова чуть позже.'; + @override String get syncRuleCleanupUnavailable => 'Не удалось надёжно определить связанные загрузки. Переподключите сервер и повторите попытку либо удалите правило без удаления загрузок.'; @override String syncedNewEpisodes({required Object count, required Object title}) => 'Синхронизировано ${count} новых эпизодов для ${title}'; @override String get activeSyncRules => 'Правила синхронизации'; @override String get noSyncRules => 'Нет правил синхронизации'; @@ -1805,9 +2010,12 @@ class _Translations$addServer$ru extends Translations$addServer$en { final TranslationsRu _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Добавить сервер ${product}'; @override String get serverUrls => 'URL-адреса сервера'; @override String get serverUrlsHelper => 'Можно указать несколько URL через запятую.'; @override String get findServer => 'Найти сервер'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Поиск локальных серверов ${product}...'; + @override String localMediaBrowserServers({required Object product}) => 'Локальные серверы ${product}'; @override String get username => 'Имя пользователя'; @override String get password => 'Пароль'; @override String get signIn => 'Войти'; @@ -1819,15 +2027,39 @@ class _Translations$addServer$ru extends Translations$addServer$en { @override String get addPlexTitle => 'Войти через Plex'; @override String get pinExpired => 'Срок действия PIN истёк до входа. Попробуйте снова.'; @override String failedToRegisterAccount({required Object error}) => 'Не удалось зарегистрировать учётную запись: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Введите URL вашего сервера ${product}'; @override String get addConnectionTitle => 'Добавить подключение'; @override String addConnectionTitleScoped({required Object name}) => 'Добавить в ${name}'; @override String get signInWithPlexCard => 'Войти через Plex'; @override String get signInWithPlexCardSubtitle => 'Авторизуйте это устройство. Общие серверы будут добавлены.'; @override String get signInWithPlexCardSubtitleScoped => 'Авторизуйте аккаунт Plex. Пользователи Home станут профилями.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Подключиться к ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Введите URL сервера, имя пользователя и пароль.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Войдите на свой сервер ${product}. Будет привязано к ${name}.'; @override String get borrowFromAnotherProfile => 'Использовать подключение другого профиля'; @override String get borrowFromAnotherProfileSubtitle => 'Повторно используйте подключение другого профиля. Для защищённых профилей потребуется PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$ru extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get critic => 'Критики'; + @override String get audience => 'Зрители'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Критики Rotten Tomatoes'; + @override String get rottenTomatoesAudience => 'Зрители Rotten Tomatoes'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$ru extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$ru._(TranslationsRu root) : this._root = root, super.internal(root); @@ -1991,6 +2223,190 @@ class _Translations$explore$status$ru extends Translations$explore$status$en { @override String get upcoming => 'Скоро'; } +// Path: explore.badge +class _Translations$explore$badge$ru extends Translations$explore$badge$en { + _Translations$explore$badge$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} по популярности'; + @override String rankAiring({required Object n}) => '#${n} в эфире'; + @override String rankRated({required Object n}) => '#${n} по оценкам'; + @override String rankFavorited({required Object n}) => '#${n} по избранному'; + @override String rankTrending({required Object n}) => '#${n} в тренде'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} в сезоне ${season}'; + @override String watchingNow({required Object n}) => '${n} смотрят'; + @override String get available => 'Доступно'; + @override String get partiallyAvailable => 'Доступно частично'; + @override String get availableIn4k => 'Доступно в 4K'; + @override String get requested => 'Запрошено'; + @override String get pendingApproval => 'Ожидает одобрения'; + @override String get processing => 'В обработке'; + @override String get declined => 'Отклонено'; + @override String get requestFailed => 'Запрос не удался'; + @override String get requested4k => 'Запрошено в 4K'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} сезонов'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Серия ${episode} через ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Далее через ${duration}'; + @override String episodesShort({required Object n}) => '${n} эп.'; + @override String minutesPerEpisode({required Object n}) => '${n} мин/эп.'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$ru extends Translations$explore$stats$en { + _Translations$explore$stats$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} в списках'; + @override String viewersDay({required Object n}) => '${n} посмотрели сегодня'; + @override String viewersWeek({required Object n}) => '${n} посмотрели на этой неделе'; + @override String viewersMonth({required Object n}) => '${n} посмотрели в этом месяце'; + @override String viewersYear({required Object n}) => '${n} посмотрели в этом году'; + @override String viewersAllTime({required Object n}) => '${n} зрителей'; + @override String planning({required Object n}) => '${n} планируют посмотреть'; + @override String favorited({required Object n}) => '${n} в избранном'; + @override String dropRate({required Object percent}) => '${percent} бросили'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: '${n} комментарий', + few: '${n} комментария', + many: '${n} комментариев', + other: '${n} комментариев', + ); + @override String votes({required Object n}) => '${n} голосов'; + @override String watching({required Object n}) => '${n} смотрят'; + @override String completed({required Object n}) => '${n} завершили'; + @override String onHold({required Object n}) => '${n} отложили'; + @override String dropped({required Object n}) => '${n} бросили'; +} + +// Path: explore.season +class _Translations$explore$season$ru extends Translations$explore$season$en { + _Translations$explore$season$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get winter => 'Зима'; + @override String get spring => 'Весна'; + @override String get summer => 'Лето'; + @override String get fall => 'Осень'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$ru extends Translations$explore$format$en { + _Translations$explore$format$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get tv => 'ТВ'; + @override String get tvShort => 'Короткометражное ТВ'; + @override String get movie => 'Фильм'; + @override String get special => 'Спецвыпуск'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Музыка'; + @override String get other => 'Другое'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$ru extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get original => 'Оригинал'; + @override String get manga => 'Манга'; + @override String get lightNovel => 'Ранобэ'; + @override String get novel => 'Новелла'; + @override String get visualNovel => 'Визуальная новелла'; + @override String get game => 'Игра'; + @override String get webComic => 'Веб-комикс'; + @override String get musicRelease => 'Музыка'; + @override String get otherMedia => 'Другое'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$ru extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get director => 'Режиссёр'; + @override String get writer => 'Сценарист'; + @override String get producer => 'Продюсер'; + @override String get creator => 'Создатель'; + @override String get composer => 'Композитор'; +} + +// Path: explore.relation +class _Translations$explore$relation$ru extends Translations$explore$relation$en { + _Translations$explore$relation$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Приквел'; + @override String get sequel => 'Сиквел'; + @override String get sideStory => 'Побочная история'; + @override String get spinOff => 'Спин-офф'; + @override String get alternativeVersion => 'Альтернативная версия'; + @override String get summary => 'Краткое изложение'; + @override String get parentStory => 'Основная история'; + @override String get adaptation => 'Адаптация'; + @override String get other => 'Связано'; +} + +// Path: explore.detail +class _Translations$explore$detail$ru extends Translations$explore$detail$en { + _Translations$explore$detail$ru._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Оригинальное название'; + @override String get alsoKnownAs => 'Также известен как'; + @override String get studios => 'Студии'; + @override String get country => 'Страна'; + @override String get language => 'Язык'; + @override String get released => 'Выпущено'; + @override String get physicalRelease => 'На диске'; + @override String get ended => 'Завершено'; + @override String addedOn({required Object date}) => 'Добавлено ${date}'; + @override String get yourRating => 'Ваша оценка'; + @override String get budget => 'Бюджет'; + @override String get revenue => 'Сборы'; + @override String get contentAdvisory => 'Возрастные ограничения'; + @override String get tags => 'Теги'; + @override String get revealSpoilerTags => 'Показать теги со спойлерами'; + @override String get links => 'Ссылки'; + @override String get watchOn => 'Смотреть на'; + @override String get watchTrailer => 'Смотреть трейлер'; + @override String openOn({required Object site}) => 'Открыть на ${site}'; + @override String get crew => 'Съёмочная группа'; + @override String get ratings => 'Рейтинги'; + @override String get schedule => 'Расписание'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: 'Рекомендуют ${n} пользователь', + few: 'Рекомендуют ${n} пользователя', + many: 'Рекомендуют ${n} пользователей', + other: 'Рекомендуют ${n} пользователей', + ); + @override String recommendedBy({required Object who}) => 'Рекомендовано: ${who}'; + @override String favoritedBy({required Object who}) => 'В избранном у ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} ещё не вышли'; + @override String recommendedByPercent({required Object percent}) => 'Рекомендуют ${percent} зрителей'; + @override String get relatedTitles => 'Связанные названия'; + @override String get background => 'Фон'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$ru extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$ru._(TranslationsRu root) : this._root = root, super.internal(root); @@ -2134,6 +2550,7 @@ class _Translations$services$names$ru extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2203,6 +2620,7 @@ extension on TranslationsRu { 'auth.waitingForAuth' => 'Ожидание аутентификации...\nВыполните вход в браузере.', 'auth.useBrowser' => 'Использовать браузер', 'auth.or' => 'или', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Подключиться к ${product}', 'auth.useQuickConnect' => 'Использовать Quick Connect', 'auth.quickConnectInstructions' => 'Откройте Quick Connect в Jellyfin и введите этот код.', 'auth.quickConnectWaiting' => 'Ожидание подтверждения…', @@ -2254,6 +2672,17 @@ extension on TranslationsRu { 'common.fullscreen' => 'Полноэкранный режим', 'common.exitFullscreen' => 'Выйти из полноэкранного режима', 'common.pressBackAgainToExit' => 'Нажмите ещё раз для выхода', + 'common.ratingSource.critic' => 'Критики', + 'common.ratingSource.audience' => 'Зрители', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Критики Rotten Tomatoes', + 'common.ratingSource.rottenTomatoesAudience' => 'Зрители Rotten Tomatoes', 'screens.licenses' => 'Лицензии', 'screens.switchProfile' => 'Сменить профиль', 'screens.subtitleStyling' => 'Стиль субтитров', @@ -2290,6 +2719,7 @@ extension on TranslationsRu { 'settings.darkTheme' => 'Тёмная', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Плотность библиотеки', + 'settings.displayScale' => 'Масштаб отображения', 'settings.compact' => 'Компактный', 'settings.comfortable' => 'Комфортный', 'settings.tvCornerSpotlightBackdrop' => 'Фоновое изображение в углу', @@ -2339,6 +2769,11 @@ extension on TranslationsRu { 'settings.bufferSizeMB' => ({required Object size}) => '${size}МБ', 'settings.bufferSizeAuto' => 'Авто (Рекомендуется)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => 'Доступно памяти: ${heap} МБ. Буфер размером ${size} МБ может повлиять на воспроизведение.', + 'settings.playbackBuffer' => 'Буфер воспроизведения', + 'settings.playbackBufferAuto' => 'Авто (рекомендуется)', + 'settings.playbackBufferLarge' => 'Большой', + 'settings.playbackBufferExtraLarge' => 'Очень большой', + 'settings.playbackBufferDescription' => 'Буферизирует больше при нестабильном соединении. Также ограничено размером буфера.', 'settings.defaultQualityTitle' => 'Качество по умолчанию', 'settings.musicQualityTitle' => 'Качество музыки', 'settings.subtitleStyling' => 'Стиль субтитров', @@ -2372,6 +2807,9 @@ extension on TranslationsRu { 'settings.debugLoggingDescription' => 'Включить подробное журналирование для устранения неполадок', 'settings.viewLogs' => 'Просмотр логов', 'settings.viewLogsDescription' => 'Просмотр логов приложения', + 'settings.clearImageCache' => 'Очистить кэш изображений', + 'settings.clearImageCacheDescription' => 'Очистить кэшированные обложки и миниатюры. Изображения могут загружаться медленнее, пока не будут загружены снова.', + 'settings.clearImageCacheSuccess' => 'Кэш изображений успешно очищен', 'settings.resetSettings' => 'Сбросить настройки', 'settings.resetSettingsDescription' => 'Восстановить настройки по умолчанию. Это нельзя отменить.', 'settings.resetSettingsSuccess' => 'Настройки успешно сброшены', @@ -2555,29 +2993,118 @@ extension on TranslationsRu { 'hotkeys.actions.skipMarker' => 'Пропустить вступление/титры', 'hotkeys.actions.screenshot' => 'Сделать снимок экрана', 'fileInfo.title' => 'Информация о файле', + 'fileInfo.overview' => 'Обзор', 'fileInfo.video' => 'Видео', 'fileInfo.audio' => 'Аудио', 'fileInfo.subtitles' => 'Субтитры', + 'fileInfo.images' => 'Встроенные изображения', + 'fileInfo.dataStreams' => 'Потоки данных', + 'fileInfo.lyrics' => 'Текст песни', 'fileInfo.file' => 'Файл', + 'fileInfo.attachments' => 'Вложения', + 'fileInfo.delivery' => 'Доставка', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Версия ${index} из ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Файл ${index} из ${count}', + 'fileInfo.noStreams' => 'Сервер не сообщил о потоках для этого файла.', + 'fileInfo.copyPath' => 'Копировать путь', + 'fileInfo.pathCopied' => 'Путь к файлу скопирован', 'fileInfo.codec' => 'Кодек', + 'fileInfo.codecTag' => 'Тег кодека', 'fileInfo.resolution' => 'Разрешение', + 'fileInfo.codedResolution' => 'Кодированное разрешение', 'fileInfo.bitrate' => 'Битрейт', 'fileInfo.frameRate' => 'Частота кадров', + 'fileInfo.rotation' => 'Поворот', + 'fileInfo.comment' => 'Комментарий', + 'fileInfo.audioDescription' => 'Аудиоописание', + 'fileInfo.headerCompression' => 'Сжатие заголовков', + 'fileInfo.sidecarFile' => 'Файл-спутник', + 'fileInfo.transportTimestamp' => 'Метка времени транспорта', + 'fileInfo.displayOffset' => 'Смещение отображения', + 'fileInfo.previewFailureCode' => 'Код ошибки превью', + 'fileInfo.previewRetries' => 'Повторные попытки превью', 'fileInfo.aspectRatio' => 'Соотношение сторон', + 'fileInfo.pixelAspectRatio' => 'Попиксельное соотношение сторон', 'fileInfo.profile' => 'Профиль', + 'fileInfo.level' => 'Уровень', 'fileInfo.bitDepth' => 'Глубина цвета', + 'fileInfo.pixelFormat' => 'Формат пикселей', 'fileInfo.colorSpace' => 'Цветовое пространство', 'fileInfo.colorRange' => 'Цветовой диапазон', 'fileInfo.colorPrimaries' => 'Основные цвета', + 'fileInfo.colorTransfer' => 'Передача цвета', 'fileInfo.chromaSubsampling' => 'Субдискретизация цветности', + 'fileInfo.chromaLocation' => 'Расположение цветности', + 'fileInfo.scanType' => 'Тип развёртки', + 'fileInfo.interlaced' => 'Чересстрочный', + 'fileInfo.anamorphic' => 'Анаморфный', + 'fileInfo.referenceFrames' => 'Опорные кадры', + 'fileInfo.dynamicRange' => 'Динамический диапазон', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Уровень Dolby Vision', + 'fileInfo.dolbyVisionVersion' => 'Версия Dolby Vision', + 'fileInfo.dolbyVisionLayers' => 'Слои Dolby Vision', + 'fileInfo.baseLayerCompatibility' => 'Совместимость базового слоя', + 'fileInfo.avcBitstream' => 'Битовый поток AVC', + 'fileInfo.nalLengthSize' => 'Размер длины NAL', + 'fileInfo.scalingMatrix' => 'Пользовательская матрица масштабирования', + 'fileInfo.streamIdentifier' => 'Идентификатор потока', + 'fileInfo.streamIndex' => 'Индекс потока', + 'fileInfo.streamId' => 'ID потока', + 'fileInfo.language' => 'Язык', + 'fileInfo.languageCode' => 'Код языка', + 'fileInfo.streamTitle' => 'Название дорожки', 'fileInfo.channels' => 'Каналы', + 'fileInfo.sampleRate' => 'Частота дискретизации', + 'fileInfo.spatialAudio' => 'Пространственное аудио', + 'fileInfo.textBased' => 'Текстовый', + 'fileInfo.subtitleFormat' => 'Формат файла-спутника', + 'fileInfo.provider' => 'Провайдер', + 'fileInfo.matchScore' => 'Оценка совпадения', + 'fileInfo.externalDelivery' => 'Может передаваться отдельно', + 'fileInfo.sidecarPath' => 'Путь к файлу-спутнику', + 'fileInfo.sourceStream' => 'Скопировано из', + 'fileInfo.temporary' => 'Временный', + 'fileInfo.timeBase' => 'Временная база', 'fileInfo.overallBitrate' => 'Общий битрейт', 'fileInfo.path' => 'Путь', + 'fileInfo.fileName' => 'Имя файла', 'fileInfo.size' => 'Размер', + 'fileInfo.totalSize' => 'Общий размер', 'fileInfo.container' => 'Контейнер', 'fileInfo.duration' => 'Длительность', + 'fileInfo.previewThumbnails' => 'Миниатюры превью', + 'fileInfo.previewIndex' => 'Индекс превью', + 'fileInfo.packetLength' => 'Длина пакета', + 'fileInfo.filePresent' => 'Файл присутствует', + 'fileInfo.fileReadable' => 'Доступен для чтения сервером', + 'fileInfo.streamPath' => 'Путь потока', 'fileInfo.optimizedForStreaming' => 'Оптимизировано для потоковой передачи', 'fileInfo.has64bitOffsets' => '64-битные смещения', + 'fileInfo.protocol' => 'Протокол', + 'fileInfo.mediaType' => 'Тип медиа', + 'fileInfo.sourceKind' => 'Тип источника', + 'fileInfo.optimizedVersion' => 'Оптимизированная версия', + 'fileInfo.optimizationTarget' => 'Цель оптимизации', + 'fileInfo.deletedAt' => 'Удалено', + 'fileInfo.remoteSource' => 'Удалённый источник', + 'fileInfo.infiniteStream' => 'Бесконечный поток', + 'fileInfo.directPlay' => 'Прямое воспроизведение', + 'fileInfo.directStream' => 'Прямой поток', + 'fileInfo.transcoding' => 'Транскодирование', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'ID версии', + 'fileInfo.fileId' => 'ID файла', + 'fileInfo.defaultAudioTrack' => 'Аудиодорожка по умолчанию', + 'fileInfo.defaultSubtitleTrack' => 'Дорожка субтитров по умолчанию', + 'fileInfo.subtitlesOff' => 'Выкл.', + 'fileInfo.flagDefault' => 'По умолчанию', + 'fileInfo.flagForced' => 'Принудительная', + 'fileInfo.flagSelected' => 'Выбрана', + 'fileInfo.flagExternal' => 'Внешняя', + 'fileInfo.flagHearingImpaired' => 'Для слабослышащих', + 'fileInfo.flagDub' => 'Дубляж', + 'fileInfo.flagOriginal' => 'Оригинал', 'mediaMenu.markAsWatched' => 'Отметить как просмотренное', 'mediaMenu.markAsUnwatched' => 'Отметить как непросмотренное', 'mediaMenu.removeFromContinueWatching' => 'Удалить из «Продолжить просмотр»', @@ -2586,7 +3113,28 @@ extension on TranslationsRu { 'mediaMenu.shufflePlay' => 'Случайное воспроизведение', 'mediaMenu.shuffleNotAvailableOffline' => 'Перемешивание недоступно офлайн', 'mediaMenu.fileInfo' => 'Информация о файле', + 'mediaMenu.deleteEpisodeFromServer' => 'Удалить эпизод с сервера', + 'mediaMenu.deleteSeasonFromServer' => 'Удалить сезон с сервера', + 'mediaMenu.deleteShowFromServer' => 'Удалить сериал с сервера', + 'mediaMenu.deleteMovieFromServer' => 'Удалить фильм с сервера', + 'mediaMenu.deleteEpisodeTitle' => 'Удалить этот эпизод?', + 'mediaMenu.deleteSeasonTitle' => 'Удалить этот сезон?', + 'mediaMenu.deleteShowTitle' => 'Удалить этот сериал?', + 'mediaMenu.deleteMovieTitle' => 'Удалить этот фильм?', + 'mediaMenu.deleteEpisodeConfirm' => 'Удалить эпизод', + 'mediaMenu.deleteSeasonConfirm' => 'Удалить сезон', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Удалить сериал', + 'mediaMenu.deleteMovieConfirm' => 'Удалить фильм', + 'mediaMenu.deleteAnyway' => 'Всё равно удалить', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Навсегда удалить ${title} с вашего сервера?', 'mediaMenu.deleteMultipleWarning' => 'Это включает все эпизоды и их файлы.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: 'Это удалит содержащийся в нём ${n} эпизод и его файл.', few: 'Это удалит содержащиеся в нём ${n} эпизода и их файлы.', many: 'Это удалит содержащиеся в нём ${n} эпизодов и их файлы.', other: 'Это удалит содержащиеся в нём ${n} эпизодов и их файлы.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: 'Этот элемент хранится как ${n} файл, который будет удалён.', few: 'Этот элемент хранится в ${n} файлах, и все они будут удалены.', many: 'Этот элемент хранится в ${n} файлах, и все они будут удалены.', other: 'Этот элемент хранится в ${n} файлах, и все они будут удалены.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: 'В этом же файле хранится ещё ${n} эпизод, и он тоже будет удалён:', few: 'В этом же файле хранятся ещё ${n} эпизода, и они тоже будут удалены:', many: 'В этом же файле хранятся ещё ${n} эпизодов, и они тоже будут удалены:', other: 'В этом же файле хранятся ещё ${n} эпизодов, и они тоже будут удалены:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy не смог проверить, какие файлы будут удалены, поэтому может быть удалено больше, чем указанный выше элемент. Отмените и попробуйте снова либо удалите в любом случае.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Ваш сервер не предоставил сведения о файлах для этого элемента, поэтому Plezy не может проверить, какие файлы будут удалены. Может быть удалено больше, чем указанный выше элемент.', 'mediaMenu.mediaDeletedSuccessfully' => 'Медиаэлемент успешно удалён', 'mediaMenu.mediaFailedToDelete' => 'Не удалось удалить медиаэлемент', 'mediaMenu.rate' => 'Оценить', @@ -2652,6 +3200,9 @@ extension on TranslationsRu { 'videoControls.playNext' => 'Следующее', 'videoControls.playButton' => 'Воспроизвести', 'videoControls.pauseButton' => 'Пауза', + 'videoControls.playbackPaused' => 'На паузе', + 'videoControls.playbackResumed' => 'Воспроизведение', + 'videoControls.loadingVideo' => 'Загрузка видео', 'videoControls.showPlaybackControls' => 'Показать элементы управления воспроизведением', 'videoControls.hidePlaybackControls' => 'Скрыть элементы управления воспроизведением', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Перемотать назад на ${seconds} с', @@ -2706,8 +3257,6 @@ extension on TranslationsRu { 'videoControls.subtitleDownloaded' => 'Субтитры загружены', 'videoControls.subtitleDownloadedNotApplied' => 'Субтитры загружены, но их не удалось выбрать', 'videoControls.subtitleDownloadFailed' => 'Не удалось загрузить субтитры', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Поиск языков...', 'messages.markedAsWatched' => 'Отмечено как просмотренное', 'messages.markedAsUnwatched' => 'Отмечено как непросмотренное', @@ -2717,6 +3266,7 @@ extension on TranslationsRu { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: 'Автоматически удалена ${n} просмотренная загрузка', few: 'Автоматически удалены ${n} просмотренные загрузки', many: 'Автоматически удалено ${n} просмотренных загрузок', other: 'Автоматически удалено ${n} просмотренной загрузки', ), 'messages.removedFromContinueWatching' => 'Удалено из «Продолжить просмотр»', 'messages.errorLoading' => ({required Object error}) => 'Ошибка: ${error}', + 'messages.searchPartialResults' => 'Поиск по некоторым медиасерверам не удался. Показываем доступные результаты.', 'messages.streamInterrupted' => 'Поток прервался. Нажмите «Воспроизвести» или перемотайте, чтобы повторить попытку.', 'messages.liveStreamInterrupted' => 'Прямая трансляция прервалась. Нажмите «Воспроизвести», чтобы повторить попытку.', 'messages.fileInfoNotAvailable' => 'Информация о файле недоступна', @@ -2755,6 +3305,8 @@ extension on TranslationsRu { 'messages.switchingToCompatiblePlayer' => 'Переключение на совместимый плеер...', 'messages.serverLimitTitle' => 'Ошибка воспроизведения', 'messages.serverLimitBody' => 'Ошибка сервера (HTTP 500). Лимит пропускной способности/транскодирования, вероятно, отклонил сессию. Попросите владельца изменить настройки.', + 'messages.mediaUnreadableTitle' => 'Файл недоступен', + 'messages.mediaUnreadableBody' => 'Сервер нашёл этот элемент, но не смог прочитать его файл (HTTP 404). Вероятно, файл был перемещён, удалён или его хранилище недоступно. Попросите владельца сервера проверить файл и пересканировать библиотеку.', 'messages.logsUploaded' => 'Логи загружены', 'messages.logsUploadFailed' => 'Не удалось загрузить логи', 'messages.logId' => 'ID лога', @@ -2863,6 +3415,8 @@ extension on TranslationsRu { 'connections.sessionExpiredOne' => ({required Object name}) => 'Сессия истекла для ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Сессия истекла для ${count} серверов', 'connections.signInAgain' => 'Войти снова', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Изменить подключение ${product}', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Добавьте или удалите URL-адреса для ${serverName}. Plezy будет использовать доступный URL с наименьшей задержкой.', 'discover.title' => 'Обзор', 'discover.noContentAvailable' => 'Контент недоступен', 'discover.addMediaToLibraries' => 'Добавьте медиафайлы в ваши библиотеки', @@ -2888,6 +3442,7 @@ extension on TranslationsRu { 'discover.minutesLeft' => ({required Object minutes}) => 'Осталось ${minutes} мин', 'discover.moreLikeThis' => 'Похожее', 'errors.searchFailed' => ({required Object error}) => 'Ошибка поиска: ${error}', + 'errors.searchUnavailable' => 'Поиску не удалось связаться ни с одним медиасервером.', 'errors.connectionTimeout' => ({required Object context}) => 'Таймаут подключения при загрузке ${context}', 'errors.connectionFailed' => 'Не удалось подключиться к медиасерверу', 'errors.unableToLoad' => ({required Object context}) => 'Не удалось загрузить ${context}. Повторите попытку.', @@ -2995,13 +3550,43 @@ extension on TranslationsRu { 'logs.clearLogs' => 'Очистить логи', 'logs.copyLogs' => 'Скопировать логи', 'logs.uploadLogs' => 'Загрузить логи', + 'startup.failedTitle' => 'Plezy не удалось запустить', + 'startup.failedBody' => 'Во время запуска что-то пошло не так. Сведения ниже показывают, что именно не удалось.', + 'startup.failedBodyRepairable' => 'Сохранённый файл настроек Plezy повреждён, и его необходимо пересоздать, прежде чем Plezy сможет запуститься. Повторные попытки не помогут — выберите «Восстановить хранилище».', + 'startup.phaseLabel' => 'Шаг', + 'startup.showDetails' => 'Показать сведения', + 'startup.hideDetails' => 'Скрыть сведения', + 'startup.copyDetails' => 'Копировать сведения', + 'startup.detailsCopied' => 'Сведения скопированы в буфер обмена', + 'startup.uploadDetails' => 'Отправить сведения', + 'startup.repairStorage' => 'Восстановить хранилище', + 'startup.repairTitle' => 'Восстановить сохранённые данные?', + 'startup.repairBodyCommon' => 'Файл настроек Plezy повреждён и не может быть прочитан. Восстановление сбросит все настройки к значениям по умолчанию.', + 'startup.repairBodyOneCredential' => 'Одна сохранённая учётная запись повреждена и не может быть прочитана. Восстановление удалит только её; остальные настройки не будут затронуты.', + 'startup.repairBodySignInsKept' => 'Вход в ваши серверы и профили будет сохранён.', + 'startup.repairBodySignInsLost' => 'Ключ, защищающий сохранённые входы, невозможно восстановить из этого файла, поэтому вам придётся снова войти на каждый сервер и в каждый профиль. На вашем медиасервере ничего не изменится.', + 'startup.repairBodySessionsUncertain' => 'Трекеры (MAL, AniList, Simkl, Trakt) и Seerr хранятся отдельно и могут сохраниться или нет. Plezy точно сообщит, что удалось сохранить.', + 'startup.repairConfirm' => 'Восстановить', + 'startup.repairSucceeded' => 'Хранилище восстановлено', + 'startup.repairNeedsRestart' => 'Хранилище восстановлено — требуется перезапуск', + 'startup.restartRequiredBody' => 'Ваши данные были восстановлены, но Plezy должен запуститься заново, чтобы использовать их. Закройте Plezy и откройте его снова.', + 'startup.quitPlezy' => 'Выйти из Plezy', + 'startup.repairFailed' => 'Не удалось восстановить', + 'startup.repairKeptSignIns' => 'Ваши серверы и профили по-прежнему в системе.', + 'startup.repairLostSignIns' => 'Ключ, защищающий сохранённые входы, не удалось восстановить. Вам придётся снова войти на каждый сервер и в каждый профиль.', + 'startup.repairLostSessions' => 'Потеряно как минимум одно подключение трекера или Seerr — его нужно восстановить.', + 'startup.backupTitle' => 'Сохранена копия повреждённого файла', + 'startup.backupWarning' => 'Она содержит ваши учётные данные для входа. Не загружайте и не передавайте её.', + 'startup.deleteBackup' => 'Удалить копию', + 'startup.backupDeleted' => 'Копия удалена.', + 'startup.previousFailureTitle' => 'В прошлый раз Plezy не удалось запустить', 'licenses.relatedPackages' => 'Связанные пакеты', 'licenses.license' => 'Лицензия', 'licenses.licenseNumber' => ({required Object number}) => 'Лицензия ${number}', 'licenses.licensesCount' => ({required Object count}) => '${count} лицензий', 'navigation.libraries' => 'Библиотеки', 'navigation.downloads' => 'Загрузки', - 'navigation.liveTv' => 'ТВ в прямом эфире', + 'navigation.liveTv' => 'Прямой эфир', 'navigation.explore' => 'Обзор', 'explore.title' => 'Обзор', 'explore.selectSource' => 'Выбрать источник', @@ -3038,6 +3623,113 @@ extension on TranslationsRu { 'explore.searchEmpty' => ({required Object query}) => 'Нет результатов по запросу "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Ищите фильмы и сериалы в ${source}.', 'explore.searchFailed' => 'Ошибка поиска. Проверьте подключение и повторите попытку.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} по популярности', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} в эфире', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} по оценкам', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} по избранному', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} в тренде', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} в сезоне ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} смотрят', + 'explore.badge.available' => 'Доступно', + 'explore.badge.partiallyAvailable' => 'Доступно частично', + 'explore.badge.availableIn4k' => 'Доступно в 4K', + 'explore.badge.requested' => 'Запрошено', + 'explore.badge.pendingApproval' => 'Ожидает одобрения', + 'explore.badge.processing' => 'В обработке', + 'explore.badge.declined' => 'Отклонено', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Запрос не удался', + 'explore.badge.requested4k' => 'Запрошено в 4K', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} сезонов', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Серия ${episode} через ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Далее через ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} эп.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} мин/эп.', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} в списках', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} посмотрели сегодня', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} посмотрели на этой неделе', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} посмотрели в этом месяце', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} посмотрели в этом году', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} зрителей', + 'explore.stats.planning' => ({required Object n}) => '${n} планируют посмотреть', + 'explore.stats.favorited' => ({required Object n}) => '${n} в избранном', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} бросили', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: '${n} комментарий', few: '${n} комментария', many: '${n} комментариев', other: '${n} комментариев', ), + 'explore.stats.votes' => ({required Object n}) => '${n} голосов', + 'explore.stats.watching' => ({required Object n}) => '${n} смотрят', + 'explore.stats.completed' => ({required Object n}) => '${n} завершили', + 'explore.stats.onHold' => ({required Object n}) => '${n} отложили', + 'explore.stats.dropped' => ({required Object n}) => '${n} бросили', + 'explore.season.winter' => 'Зима', + 'explore.season.spring' => 'Весна', + 'explore.season.summer' => 'Лето', + 'explore.season.fall' => 'Осень', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'ТВ', + 'explore.format.tvShort' => 'Короткометражное ТВ', + 'explore.format.movie' => 'Фильм', + 'explore.format.special' => 'Спецвыпуск', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Музыка', + 'explore.format.other' => 'Другое', + 'explore.sourceMaterial.original' => 'Оригинал', + 'explore.sourceMaterial.manga' => 'Манга', + 'explore.sourceMaterial.lightNovel' => 'Ранобэ', + 'explore.sourceMaterial.novel' => 'Новелла', + 'explore.sourceMaterial.visualNovel' => 'Визуальная новелла', + 'explore.sourceMaterial.game' => 'Игра', + 'explore.sourceMaterial.webComic' => 'Веб-комикс', + 'explore.sourceMaterial.musicRelease' => 'Музыка', + 'explore.sourceMaterial.otherMedia' => 'Другое', + 'explore.creditRole.director' => 'Режиссёр', + 'explore.creditRole.writer' => 'Сценарист', + 'explore.creditRole.producer' => 'Продюсер', + 'explore.creditRole.creator' => 'Создатель', + 'explore.creditRole.composer' => 'Композитор', + 'explore.relation.prequel' => 'Приквел', + 'explore.relation.sequel' => 'Сиквел', + 'explore.relation.sideStory' => 'Побочная история', + 'explore.relation.spinOff' => 'Спин-офф', + 'explore.relation.alternativeVersion' => 'Альтернативная версия', + 'explore.relation.summary' => 'Краткое изложение', + 'explore.relation.parentStory' => 'Основная история', + 'explore.relation.adaptation' => 'Адаптация', + 'explore.relation.other' => 'Связано', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Выходит ${day} в ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Выходит ${day} в ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Оригинальное название', + 'explore.detail.alsoKnownAs' => 'Также известен как', + 'explore.detail.studios' => 'Студии', + 'explore.detail.country' => 'Страна', + 'explore.detail.language' => 'Язык', + 'explore.detail.released' => 'Выпущено', + 'explore.detail.physicalRelease' => 'На диске', + 'explore.detail.ended' => 'Завершено', + 'explore.detail.addedOn' => ({required Object date}) => 'Добавлено ${date}', + 'explore.detail.yourRating' => 'Ваша оценка', + 'explore.detail.budget' => 'Бюджет', + 'explore.detail.revenue' => 'Сборы', + 'explore.detail.contentAdvisory' => 'Возрастные ограничения', + 'explore.detail.tags' => 'Теги', + 'explore.detail.revealSpoilerTags' => 'Показать теги со спойлерами', + 'explore.detail.links' => 'Ссылки', + 'explore.detail.watchOn' => 'Смотреть на', + 'explore.detail.watchTrailer' => 'Смотреть трейлер', + 'explore.detail.openOn' => ({required Object site}) => 'Открыть на ${site}', + 'explore.detail.crew' => 'Съёмочная группа', + 'explore.detail.ratings' => 'Рейтинги', + 'explore.detail.schedule' => 'Расписание', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: 'Рекомендуют ${n} пользователь', few: 'Рекомендуют ${n} пользователя', many: 'Рекомендуют ${n} пользователей', other: 'Рекомендуют ${n} пользователей', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Рекомендовано: ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'В избранном у ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} ещё не вышли', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Рекомендуют ${percent} зрителей', + 'explore.detail.relatedTitles' => 'Связанные названия', + 'explore.detail.background' => 'Фон', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: '${n} результат', few: '${n} результата', many: '${n} результатов', other: '${n} результатов', ), 'liveTv.title' => 'ТВ в прямом эфире', 'liveTv.guide' => 'Программа', 'liveTv.noChannels' => 'Нет доступных каналов', @@ -3220,8 +3912,6 @@ extension on TranslationsRu { 'watchTogether.relayUnreachable' => 'Сервер ретрансляции недоступен. Блокировка интернет-провайдером может помешать совместному просмотру.', 'watchTogether.reconnectingToHost' => 'Повторное подключение к организатору...', 'watchTogether.currentPlayback' => 'Текущее воспроизведение', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Присоединиться к текущему воспроизведению', 'watchTogether.joinCurrentPlaybackDescription' => 'Вернуться к материалу, который сейчас смотрит организатор', 'watchTogether.failedToOpenCurrentPlayback' => 'Не удалось открыть текущее воспроизведение', @@ -3290,9 +3980,15 @@ extension on TranslationsRu { 'downloads.editSyncRule' => 'Редактировать правило синхронизации', 'downloads.removeSyncRule' => 'Удалить правило синхронизации', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Прекратить синхронизацию «${title}»? Скачанные эпизоды будут сохранены.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Прекратить синхронизацию "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Также удалить связанные загрузки', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Загрузки, используемые другим правилом синхронизации или профилем, будут сохранены.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Правило синхронизации создано — хранится ${count} непросмотренных эпизодов', 'downloads.syncRuleUpdated' => 'Правило синхронизации обновлено', 'downloads.syncRuleRemoved' => 'Правило синхронизации удалено', + 'downloads.syncRuleAndDownloadsRemoved' => 'Правило синхронизации и связанные загрузки удалены', + 'downloads.syncRuleCleanupBusy' => 'Правила синхронизации сейчас обновляются. Попробуйте снова чуть позже.', + 'downloads.syncRuleCleanupUnavailable' => 'Не удалось надёжно определить связанные загрузки. Переподключите сервер и повторите попытку либо удалите правило без удаления загрузок.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => 'Синхронизировано ${count} новых эпизодов для ${title}', 'downloads.activeSyncRules' => 'Правила синхронизации', 'downloads.noSyncRules' => 'Нет правил синхронизации', @@ -3455,6 +4151,8 @@ extension on TranslationsRu { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'Сред. DV RPU', 'performanceOverlay.dvSampleAverage' => 'Сред. сэмпл DV', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Макс. яркость', 'performanceOverlay.minLuma' => 'Мин. яркость', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3624,6 +4322,7 @@ extension on TranslationsRu { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Активируйте Plezy в ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Перейдите на ${url} и введите этот код:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Открыть ${service} для активации', @@ -3647,9 +4346,12 @@ extension on TranslationsRu { 'services.libraryFilter.modeHintWhitelist' => 'Синхронизировать только библиотеки, отмеченные ниже.', 'services.libraryFilter.libraries' => 'Библиотеки', 'services.libraryFilter.noLibraries' => 'Библиотеки недоступны', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Добавить сервер ${product}', 'addServer.serverUrls' => 'URL-адреса сервера', 'addServer.serverUrlsHelper' => 'Можно указать несколько URL через запятую.', 'addServer.findServer' => 'Найти сервер', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Поиск локальных серверов ${product}...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Локальные серверы ${product}', 'addServer.username' => 'Имя пользователя', 'addServer.password' => 'Пароль', 'addServer.signIn' => 'Войти', @@ -3661,11 +4363,15 @@ extension on TranslationsRu { 'addServer.addPlexTitle' => 'Войти через Plex', 'addServer.pinExpired' => 'Срок действия PIN истёк до входа. Попробуйте снова.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Не удалось зарегистрировать учётную запись: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Введите URL вашего сервера ${product}', 'addServer.addConnectionTitle' => 'Добавить подключение', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Добавить в ${name}', 'addServer.signInWithPlexCard' => 'Войти через Plex', 'addServer.signInWithPlexCardSubtitle' => 'Авторизуйте это устройство. Общие серверы будут добавлены.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Авторизуйте аккаунт Plex. Пользователи Home станут профилями.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Подключиться к ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Введите URL сервера, имя пользователя и пароль.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Войдите на свой сервер ${product}. Будет привязано к ${name}.', 'addServer.borrowFromAnotherProfile' => 'Использовать подключение другого профиля', 'addServer.borrowFromAnotherProfileSubtitle' => 'Повторно используйте подключение другого профиля. Для защищённых профилей потребуется PIN.', _ => null, diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index d3ca71fd..2f63c8e7 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -67,6 +67,7 @@ class TranslationsSv extends Translations with BaseTranslations 'Väntar på autentisering...\nLogga in från din webbläsare.'; @override String get useBrowser => 'Använd webbläsare'; @override String get or => 'eller'; + @override String connectToMediaBrowser({required Object product}) => 'Anslut till ${product}'; @override String get useQuickConnect => 'Använd Quick Connect'; @override String get quickConnectInstructions => 'Öppna Quick Connect i Jellyfin och ange den här koden.'; @override String get quickConnectWaiting => 'Väntar på godkännande…'; @@ -175,6 +177,7 @@ class _Translations$common$sv extends Translations$common$en { @override String get fullscreen => 'Helskärm'; @override String get exitFullscreen => 'Avsluta helskärm'; @override String get pressBackAgainToExit => 'Tryck bakåt igen för att avsluta'; + @override late final _Translations$common$ratingSource$sv ratingSource = _Translations$common$ratingSource$sv._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$sv extends Translations$settings$en { @override String get darkTheme => 'Mörkt'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Biblioteksdensitet'; + @override String get displayScale => 'Skalning'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Luftig'; @override String get tvCornerSpotlightBackdrop => 'Bakgrundsbild för utvalt innehåll i hörnet'; @@ -287,6 +291,11 @@ class _Translations$settings$sv extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => 'Automatiskt (rekommenderas)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} MB minne är tillgängligt. En buffert på ${size} MB kan påverka uppspelningen.'; + @override String get playbackBuffer => 'Uppspelningsbuffert'; + @override String get playbackBufferAuto => 'Auto (rekommenderas)'; + @override String get playbackBufferLarge => 'Stor'; + @override String get playbackBufferExtraLarge => 'Extra stor'; + @override String get playbackBufferDescription => 'Buffrar mer mot instabila anslutningar. Begränsas även av buffertstorleken.'; @override String get defaultQualityTitle => 'Standardkvalitet'; @override String get musicQualityTitle => 'Musikkvalitet'; @override String get subtitleStyling => 'Utseende för undertexter'; @@ -320,6 +329,9 @@ class _Translations$settings$sv extends Translations$settings$en { @override String get debugLoggingDescription => 'Aktivera detaljerad loggning för felsökning'; @override String get viewLogs => 'Visa loggar'; @override String get viewLogsDescription => 'Visa appens loggar'; + @override String get clearImageCache => 'Rensa bildcache'; + @override String get clearImageCacheDescription => 'Rensa cachad grafik och miniatyrer. Bilder kan laddas långsammare tills de hämtas igen.'; + @override String get clearImageCacheSuccess => 'Bildcachen har rensats'; @override String get resetSettings => 'Återställ inställningarna'; @override String get resetSettingsDescription => 'Återställ standardinställningarna. Det går inte att ångra.'; @override String get resetSettingsSuccess => 'Inställningarna har återställts'; @@ -506,29 +518,118 @@ class _Translations$fileInfo$sv extends Translations$fileInfo$en { // Translations @override String get title => 'Filinformation'; + @override String get overview => 'Översikt'; @override String get video => 'Video'; @override String get audio => 'Ljud'; @override String get subtitles => 'Undertexter'; + @override String get images => 'Inbäddade bilder'; + @override String get dataStreams => 'Dataströmmar'; + @override String get lyrics => 'Sångtexter'; @override String get file => 'Fil'; + @override String get attachments => 'Bilagor'; + @override String get delivery => 'Leverans'; + @override String versionCounter({required Object index, required Object count}) => 'Version ${index} av ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Fil ${index} av ${count}'; + @override String get noStreams => 'Servern rapporterade inga strömmar för den här filen.'; + @override String get copyPath => 'Kopiera sökväg'; + @override String get pathCopied => 'Filsökväg kopierad'; @override String get codec => 'Kodek'; + @override String get codecTag => 'Codec-tagg'; @override String get resolution => 'Upplösning'; + @override String get codedResolution => 'Kodad upplösning'; @override String get bitrate => 'Bithastighet'; @override String get frameRate => 'Bildfrekvens'; + @override String get rotation => 'Rotation'; + @override String get comment => 'Kommentar'; + @override String get audioDescription => 'Ljudbeskrivning'; + @override String get headerCompression => 'Headerkomprimering'; + @override String get sidecarFile => 'Sidecar-fil'; + @override String get transportTimestamp => 'Transporttidsstämpel'; + @override String get displayOffset => 'Visningsoffset'; + @override String get previewFailureCode => 'Kod för förhandsgranskningsfel'; + @override String get previewRetries => 'Omförsök för förhandsgranskning'; @override String get aspectRatio => 'Bildförhållande'; + @override String get pixelAspectRatio => 'Pixelförhållande'; @override String get profile => 'Profil'; + @override String get level => 'Nivå'; @override String get bitDepth => 'Bitdjup'; + @override String get pixelFormat => 'Pixelformat'; @override String get colorSpace => 'Färgrymd'; @override String get colorRange => 'Färgområde'; @override String get colorPrimaries => 'Färgprimärer'; + @override String get colorTransfer => 'Färgöverföring'; @override String get chromaSubsampling => 'Krominansnedsampling'; + @override String get chromaLocation => 'Kroma-placering'; + @override String get scanType => 'Skanningsläge'; + @override String get interlaced => 'Interlaced'; + @override String get anamorphic => 'Anamorfisk'; + @override String get referenceFrames => 'Referensbildrutor'; + @override String get dynamicRange => 'Dynamiskt omfång'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision-nivå'; + @override String get dolbyVisionVersion => 'Dolby Vision-version'; + @override String get dolbyVisionLayers => 'Dolby Vision-lager'; + @override String get baseLayerCompatibility => 'Kompatibilitet för baslager'; + @override String get avcBitstream => 'AVC-bitström'; + @override String get nalLengthSize => 'NAL-längdstorlek'; + @override String get scalingMatrix => 'Anpassad skalningsmatris'; + @override String get streamIdentifier => 'Strömidentifierare'; + @override String get streamIndex => 'Strömindex'; + @override String get streamId => 'Ström-ID'; + @override String get language => 'Språk'; + @override String get languageCode => 'Språkkod'; + @override String get streamTitle => 'Spårnamn'; @override String get channels => 'Kanaler'; + @override String get sampleRate => 'Samplingsfrekvens'; + @override String get spatialAudio => 'Rumsligt ljud'; + @override String get textBased => 'Textbaserad'; + @override String get subtitleFormat => 'Sidecar-format'; + @override String get provider => 'Leverantör'; + @override String get matchScore => 'Matchningspoäng'; + @override String get externalDelivery => 'Kan levereras separat'; + @override String get sidecarPath => 'Sidecar-sökväg'; + @override String get sourceStream => 'Kopierad från'; + @override String get temporary => 'Tillfällig'; + @override String get timeBase => 'Tidsbas'; @override String get overallBitrate => 'Total bithastighet'; @override String get path => 'Sökväg'; + @override String get fileName => 'Filnamn'; @override String get size => 'Storlek'; + @override String get totalSize => 'Total storlek'; @override String get container => 'Container'; @override String get duration => 'Varaktighet'; + @override String get previewThumbnails => 'Förhandsgranskningsminiatyrer'; + @override String get previewIndex => 'Förhandsgranskningsindex'; + @override String get packetLength => 'Paketlängd'; + @override String get filePresent => 'Fil finns'; + @override String get fileReadable => 'Läsbar av servern'; + @override String get streamPath => 'Strömsökväg'; @override String get optimizedForStreaming => 'Optimerad för streaming'; @override String get has64bitOffsets => '64-bitars offsetvärden'; + @override String get protocol => 'Protokoll'; + @override String get mediaType => 'Mediatyp'; + @override String get sourceKind => 'Källtyp'; + @override String get optimizedVersion => 'Optimerad version'; + @override String get optimizationTarget => 'Optimeringsmål'; + @override String get deletedAt => 'Raderad'; + @override String get remoteSource => 'Fjärrkälla'; + @override String get infiniteStream => 'Oändlig ström'; + @override String get directPlay => 'Direktuppspelning'; + @override String get directStream => 'Direktströmning'; + @override String get transcoding => 'Transkodning'; + @override String get etag => 'ETag'; + @override String get versionId => 'Versions-ID'; + @override String get fileId => 'Fil-ID'; + @override String get defaultAudioTrack => 'Standardljudspår'; + @override String get defaultSubtitleTrack => 'Standardundertextspår'; + @override String get subtitlesOff => 'Av'; + @override String get flagDefault => 'Standard'; + @override String get flagForced => 'Forcerad'; + @override String get flagSelected => 'Vald'; + @override String get flagExternal => 'Extern'; + @override String get flagHearingImpaired => 'Hörselskadade'; + @override String get flagDub => 'Dubbad'; + @override String get flagOriginal => 'Original'; } // Path: mediaMenu @@ -546,7 +647,35 @@ class _Translations$mediaMenu$sv extends Translations$mediaMenu$en { @override String get shufflePlay => 'Blanda uppspelning'; @override String get shuffleNotAvailableOffline => 'Blandad uppspelning är inte tillgänglig offline'; @override String get fileInfo => 'Filinformation'; + @override String get deleteEpisodeFromServer => 'Ta bort avsnitt från servern'; + @override String get deleteSeasonFromServer => 'Ta bort säsong från servern'; + @override String get deleteShowFromServer => 'Ta bort serie från servern'; + @override String get deleteMovieFromServer => 'Ta bort film från servern'; + @override String get deleteEpisodeTitle => 'Ta bort det här avsnittet?'; + @override String get deleteSeasonTitle => 'Ta bort den här säsongen?'; + @override String get deleteShowTitle => 'Ta bort den här serien?'; + @override String get deleteMovieTitle => 'Ta bort den här filmen?'; + @override String get deleteEpisodeConfirm => 'Ta bort avsnitt'; + @override String get deleteSeasonConfirm => 'Ta bort säsong'; + @override String get deleteShowConfirm => 'Ta bort serie'; + @override String get deleteMovieConfirm => 'Ta bort film'; + @override String get deleteAnyway => 'Ta bort ändå'; + @override String confirmDeleteTarget({required Object title}) => 'Ta bort ${title} permanent från servern?'; @override String get deleteMultipleWarning => 'Detta omfattar alla avsnitt och deras filer.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: 'Detta tar bort ${n} avsnitt i den, och dess fil.', + other: 'Detta tar bort alla ${n} avsnitt i den, och deras filer.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: 'Detta objekt lagras som ${n} fil, som kommer att tas bort.', + other: 'Detta objekt lagras i ${n} filer, och alla kommer att tas bort.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: '${n} annat avsnitt lagras i samma fil och kommer också att tas bort:', + other: '${n} andra avsnitt lagras i samma fil och kommer också att tas bort:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy kunde inte kontrollera vilka filer detta tar bort, så det kan ta bort mer än objektet ovan. Avbryt och försök igen, eller ta bort ändå.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Din server tillhandahöll inte filinformation för detta objekt, så Plezy kan inte kontrollera vilka filer detta tar bort. Det kan ta bort mer än objektet ovan.'; @override String get mediaDeletedSuccessfully => 'Medieobjektet har tagits bort'; @override String get mediaFailedToDelete => 'Det gick inte att ta bort medieobjektet'; @override String get rate => 'Betygsätt'; @@ -657,6 +786,9 @@ class _Translations$videoControls$sv extends Translations$videoControls$en { @override String get playNext => 'Spela nästa'; @override String get playButton => 'Spela'; @override String get pauseButton => 'Pausa'; + @override String get playbackPaused => 'Pausad'; + @override String get playbackResumed => 'Spelar'; + @override String get loadingVideo => 'Laddar video'; @override String get showPlaybackControls => 'Visa uppspelningskontroller'; @override String get hidePlaybackControls => 'Dölj uppspelningskontroller'; @override String seekBackwardButton({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; @@ -726,6 +858,7 @@ class _Translations$messages$sv extends Translations$messages$en { ); @override String get removedFromContinueWatching => 'Borttagen från Fortsätt titta'; @override String errorLoading({required Object error}) => 'Fel: ${error}'; + @override String get searchPartialResults => 'Vissa mediaservrar kunde inte sökas. Visar tillgängliga resultat.'; @override String get streamInterrupted => 'Strömmen avbröts. Tryck på uppspelning eller spola för att försöka igen.'; @override String get liveStreamInterrupted => 'Liveströmmen avbröts. Tryck på uppspelning för att försöka igen.'; @override String get fileInfoNotAvailable => 'Filinformation är inte tillgänglig'; @@ -764,6 +897,8 @@ class _Translations$messages$sv extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Byter till kompatibel spelare...'; @override String get serverLimitTitle => 'Uppspelningen misslyckades'; @override String get serverLimitBody => 'Serverfel (HTTP 500). En bandbredds-/transkodningsgräns avvisade troligen sessionen. Be ägaren justera den.'; + @override String get mediaUnreadableTitle => 'Filen är otillgänglig'; + @override String get mediaUnreadableBody => 'Servern hittade objektet men kunde inte läsa dess fil (HTTP 404). Filen har troligen flyttats, tagits bort eller så är dess lagring offline. Be serverägaren kontrollera filen och skanna om biblioteket.'; @override String get logsUploaded => 'Loggarna har laddats upp'; @override String get logsUploadFailed => 'Det gick inte att ladda upp loggarna'; @override String get logId => 'Logg-ID'; @@ -917,6 +1052,8 @@ class _Translations$connections$sv extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => 'Sessionen har gått ut för ${name}'; @override String sessionExpiredMany({required Object count}) => 'Sessionen har gått ut för ${count} servrar'; @override String get signInAgain => 'Logga in igen'; + @override String editMediaBrowserTitle({required Object product}) => 'Redigera ${product}-anslutning'; + @override String editMediaBrowserIntro({required Object serverName}) => 'Lägg till eller ta bort URL:er för ${serverName}. Plezy använder den nåbara URL:en med lägst latens.'; } // Path: discover @@ -960,6 +1097,7 @@ class _Translations$errors$sv extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => 'Sökningen misslyckades: ${error}'; + @override String get searchUnavailable => 'Sökningen kunde inte nå någon medieserver.'; @override String connectionTimeout({required Object context}) => 'Anslutningen tog för lång tid när ${context} lästes in'; @override String get connectionFailed => 'Det gick inte att ansluta till medieservern'; @override String unableToLoad({required Object context}) => 'Det gick inte att läsa in ${context}. Försök igen.'; @@ -1077,6 +1215,45 @@ class _Translations$logs$sv extends Translations$logs$en { @override String get uploadLogs => 'Ladda upp loggar'; } +// Path: startup +class _Translations$startup$sv extends Translations$startup$en { + _Translations$startup$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy kunde inte starta'; + @override String get failedBody => 'Något gick fel under starten. Detaljerna nedan visar vad som misslyckades.'; + @override String get failedBodyRepairable => 'Plezys sparade inställningsfil är skadad och måste byggas om innan Plezy kan starta. Att försöka igen hjälper inte — välj Reparera lagring.'; + @override String get phaseLabel => 'Steg'; + @override String get showDetails => 'Visa detaljer'; + @override String get hideDetails => 'Dölj detaljer'; + @override String get copyDetails => 'Kopiera detaljer'; + @override String get detailsCopied => 'Detaljer kopierade till urklipp'; + @override String get uploadDetails => 'Ladda upp detaljer'; + @override String get repairStorage => 'Reparera lagring'; + @override String get repairTitle => 'Reparera lagrade data?'; + @override String get repairBodyCommon => 'Plezys inställningsfil är skadad och kan inte läsas. Reparationen återställer alla inställningar till standard.'; + @override String get repairBodyOneCredential => 'En sparad inloggning är skadad och kan inte läsas. Reparationen tar bort endast den; dina andra inställningar lämnas orörda.'; + @override String get repairBodySignInsKept => 'Dina servrar och profiler bör förbli inloggade.'; + @override String get repairBodySignInsLost => 'Nyckeln som skyddar dina sparade inloggningar kan inte återställas från den här filen, så du måste logga in på varje server och profil igen. Inget på din medieserver påverkas.'; + @override String get repairBodySessionsUncertain => 'Trackers (MAL, AniList, Simkl, Trakt) och Seerr lagras separat och kan överleva eller inte. Plezy berättar exakt vad som behållits.'; + @override String get repairConfirm => 'Reparera'; + @override String get repairSucceeded => 'Lagringen reparerad'; + @override String get repairNeedsRestart => 'Lagringen reparerad — omstart krävs'; + @override String get restartRequiredBody => 'Dina data reparerades, men Plezy måste starta om innan de kan användas. Stäng Plezy och öppna det igen.'; + @override String get quitPlezy => 'Avsluta Plezy'; + @override String get repairFailed => 'Reparationen misslyckades'; + @override String get repairKeptSignIns => 'Dina servrar och profiler är fortfarande inloggade.'; + @override String get repairLostSignIns => 'Nyckeln som skyddar dina sparade inloggningar kunde inte återställas. Du måste logga in på varje server och profil igen.'; + @override String get repairLostSessions => 'Minst en tracker- eller Seerr-anslutning förlorades och måste återanslutas.'; + @override String get backupTitle => 'En kopia av den skadade filen sparades'; + @override String get backupWarning => 'Den innehåller dina inloggningsuppgifter. Ladda inte upp eller dela den.'; + @override String get deleteBackup => 'Ta bort kopia'; + @override String get backupDeleted => 'Kopian borttagen.'; + @override String get previousFailureTitle => 'Plezy kunde inte starta förra gången'; +} + // Path: licenses class _Translations$licenses$sv extends Translations$licenses$en { _Translations$licenses$sv._(TranslationsSv root) : this._root = root, super.internal(root); @@ -1132,6 +1309,20 @@ class _Translations$explore$sv extends Translations$explore$en { @override String searchEmpty({required Object query}) => 'Inga resultat för "${query}"'; @override String searchPrompt({required Object source}) => 'Sök efter filmer och serier på ${source}.'; @override String get searchFailed => 'Sökningen misslyckades. Kontrollera din anslutning och försök igen.'; + @override late final _Translations$explore$badge$sv badge = _Translations$explore$badge$sv._(_root); + @override late final _Translations$explore$stats$sv stats = _Translations$explore$stats$sv._(_root); + @override late final _Translations$explore$season$sv season = _Translations$explore$season$sv._(_root); + @override late final _Translations$explore$format$sv format = _Translations$explore$format$sv._(_root); + @override late final _Translations$explore$sourceMaterial$sv sourceMaterial = _Translations$explore$sourceMaterial$sv._(_root); + @override late final _Translations$explore$creditRole$sv creditRole = _Translations$explore$creditRole$sv._(_root); + @override late final _Translations$explore$relation$sv relation = _Translations$explore$relation$sv._(_root); + @override String broadcast({required Object day, required Object time}) => 'Sänds ${day} kl. ${time}'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => 'Sänds ${day} kl. ${time} ${timezone}'; + @override late final _Translations$explore$detail$sv detail = _Translations$explore$detail$sv._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: '${n} resultat', + other: '${n} resultat', + ); } // Path: liveTv @@ -1439,9 +1630,15 @@ class _Translations$downloads$sv extends Translations$downloads$en { @override String get editSyncRule => 'Redigera synkregel'; @override String get removeSyncRule => 'Ta bort synkregel'; @override String removeSyncRuleConfirm({required Object title}) => 'Sluta synkronisera "${title}"? Nedladdade avsnitt behålls.'; + @override String removeListSyncRuleConfirm({required Object title}) => 'Sluta synkronisera "${title}"?'; + @override String get deleteSyncRuleDownloads => 'Ta även bort associerade nedladdningar'; + @override String get deleteSyncRuleDownloadsDescription => 'Nedladdningar som används av en annan synkregel eller profil behålls.'; @override String syncRuleCreated({required Object count}) => 'Synkregel skapad — behåller ${count} osedda avsnitt'; @override String get syncRuleUpdated => 'Synkregel uppdaterad'; @override String get syncRuleRemoved => 'Synkregel borttagen'; + @override String get syncRuleAndDownloadsRemoved => 'Synkregel och associerade nedladdningar borttagna'; + @override String get syncRuleCleanupBusy => 'Synkregler uppdateras just nu. Försök igen om en liten stund.'; + @override String get syncRuleCleanupUnavailable => 'Associerade nedladdningar kunde inte identifieras på ett säkert sätt. Återanslut servern och försök igen, eller ta bort regeln utan att ta bort nedladdningar.'; @override String syncedNewEpisodes({required Object count, required Object title}) => 'Synkroniserade ${count} nya avsnitt för ${title}'; @override String get activeSyncRules => 'Synkregler'; @override String get noSyncRules => 'Inga synkregler'; @@ -1799,9 +1996,12 @@ class _Translations$addServer$sv extends Translations$addServer$en { final TranslationsSv _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => 'Lägg till ${product}-server'; @override String get serverUrls => 'Server-URL:er'; @override String get serverUrlsHelper => 'Du kan ange flera URL:er avgränsade med kommatecken.'; @override String get findServer => 'Hitta server'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Söker efter lokala ${product}-servrar...'; + @override String localMediaBrowserServers({required Object product}) => 'Lokala ${product}-servrar'; @override String get username => 'Användarnamn'; @override String get password => 'Lösenord'; @override String get signIn => 'Logga in'; @@ -1813,15 +2013,39 @@ class _Translations$addServer$sv extends Translations$addServer$en { @override String get addPlexTitle => 'Logga in med Plex'; @override String get pinExpired => 'PIN-koden gick ut innan inloggning. Försök igen.'; @override String failedToRegisterAccount({required Object error}) => 'Kunde inte registrera kontot: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => 'Ange din ${product}-server-URL'; @override String get addConnectionTitle => 'Lägg till anslutning'; @override String addConnectionTitleScoped({required Object name}) => 'Lägg till i ${name}'; @override String get signInWithPlexCard => 'Logga in med Plex'; @override String get signInWithPlexCardSubtitle => 'Auktorisera den här enheten. Delade servrar läggs till.'; @override String get signInWithPlexCardSubtitleScoped => 'Auktorisera ett Plex-konto. Home-användare blir profiler.'; + @override String connectToMediaBrowserCard({required Object product}) => 'Anslut till ${product}'; + @override String get connectToMediaBrowserCardSubtitle => 'Ange din server-URL, användarnamn och lösenord.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Logga in på din ${product}-server. Knyts till ${name}.'; @override String get borrowFromAnotherProfile => 'Låna från en annan profil'; @override String get borrowFromAnotherProfileSubtitle => 'Återanvänd en annan profils anslutning. PIN-skyddade profiler kräver en PIN.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$sv extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get critic => 'Kritiker'; + @override String get audience => 'Publik'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes-kritiker'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes-publik'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$sv extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$sv._(TranslationsSv root) : this._root = root, super.internal(root); @@ -1985,6 +2209,186 @@ class _Translations$explore$status$sv extends Translations$explore$status$en { @override String get upcoming => 'Kommande'; } +// Path: explore.badge +class _Translations$explore$badge$sv extends Translations$explore$badge$en { + _Translations$explore$badge$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} populär'; + @override String rankAiring({required Object n}) => '#${n} sänds nu'; + @override String rankRated({required Object n}) => '#${n} bäst betygsatta'; + @override String rankFavorited({required Object n}) => '#${n} mest favoritmarkerade'; + @override String rankTrending({required Object n}) => '#${n} trendar'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} i ${season}'; + @override String watchingNow({required Object n}) => '${n} tittar nu'; + @override String get available => 'Tillgänglig'; + @override String get partiallyAvailable => 'Delvis tillgänglig'; + @override String get availableIn4k => '4K tillgängligt'; + @override String get requested => 'Begärd'; + @override String get pendingApproval => 'Väntar på godkännande'; + @override String get processing => 'Bearbetas'; + @override String get declined => 'Avvisad'; + @override String get requestFailed => 'Begäran misslyckades'; + @override String get requested4k => '4K begärd'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} säsonger'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Avsnitt ${episode} om ${duration}'; + @override String nextAiringIn({required Object duration}) => 'Nästa om ${duration}'; + @override String episodesShort({required Object n}) => '${n} avsn.'; + @override String minutesPerEpisode({required Object n}) => '${n} min/avsn'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$sv extends Translations$explore$stats$en { + _Translations$explore$stats$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} listade'; + @override String viewersDay({required Object n}) => '${n} tittade idag'; + @override String viewersWeek({required Object n}) => '${n} tittade denna vecka'; + @override String viewersMonth({required Object n}) => '${n} tittade denna månad'; + @override String viewersYear({required Object n}) => '${n} tittade i år'; + @override String viewersAllTime({required Object n}) => '${n} tittare'; + @override String planning({required Object n}) => '${n} planerar att titta'; + @override String favorited({required Object n}) => '${n} favoriter'; + @override String dropRate({required Object percent}) => '${percent} hoppade av'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: '${n} kommentar', + other: '${n} kommentarer', + ); + @override String votes({required Object n}) => '${n} röster'; + @override String watching({required Object n}) => '${n} tittar på den'; + @override String completed({required Object n}) => '${n} avslutade'; + @override String onHold({required Object n}) => '${n} på paus'; + @override String dropped({required Object n}) => '${n} hoppade av'; +} + +// Path: explore.season +class _Translations$explore$season$sv extends Translations$explore$season$en { + _Translations$explore$season$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get winter => 'Vinter'; + @override String get spring => 'Vår'; + @override String get summer => 'Sommar'; + @override String get fall => 'Höst'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$sv extends Translations$explore$format$en { + _Translations$explore$format$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV-short'; + @override String get movie => 'Film'; + @override String get special => 'Special'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musik'; + @override String get other => 'Annat'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$sv extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get original => 'Original'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Spel'; + @override String get webComic => 'Webbserie'; + @override String get musicRelease => 'Musik'; + @override String get otherMedia => 'Annat'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$sv extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get director => 'Regissör'; + @override String get writer => 'Författare'; + @override String get producer => 'Producent'; + @override String get creator => 'Skapare'; + @override String get composer => 'Kompositör'; +} + +// Path: explore.relation +class _Translations$explore$relation$sv extends Translations$explore$relation$en { + _Translations$explore$relation$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Uppföljare'; + @override String get sideStory => 'Bihistoria'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternativ version'; + @override String get summary => 'Sammanfattning'; + @override String get parentStory => 'Huvudberättelse'; + @override String get adaptation => 'Adaption'; + @override String get other => 'Relaterat'; +} + +// Path: explore.detail +class _Translations$explore$detail$sv extends Translations$explore$detail$en { + _Translations$explore$detail$sv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Originaltitel'; + @override String get alsoKnownAs => 'Även känd som'; + @override String get studios => 'Studior'; + @override String get country => 'Land'; + @override String get language => 'Språk'; + @override String get released => 'Släppt'; + @override String get physicalRelease => 'På skiva'; + @override String get ended => 'Avslutad'; + @override String addedOn({required Object date}) => 'Tillagd ${date}'; + @override String get yourRating => 'Ditt betyg'; + @override String get budget => 'Budget'; + @override String get revenue => 'Box office'; + @override String get contentAdvisory => 'Åldersvägledning'; + @override String get tags => 'Taggar'; + @override String get revealSpoilerTags => 'Visa spoiler-taggar'; + @override String get links => 'Länkar'; + @override String get watchOn => 'Titta på'; + @override String get watchTrailer => 'Titta på trailer'; + @override String openOn({required Object site}) => 'Öppna på ${site}'; + @override String get crew => 'Besättning'; + @override String get ratings => 'Betyg'; + @override String get schedule => 'Schema'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: 'Rekommenderad av ${n} användare', + other: 'Rekommenderad av ${n} användare', + ); + @override String recommendedBy({required Object who}) => 'Rekommenderad av ${who}'; + @override String favoritedBy({required Object who}) => 'Favoritmarkerad av ${who}'; + @override String unairedEpisodes({required Object n}) => '${n} inte sända ännu'; + @override String recommendedByPercent({required Object percent}) => 'Rekommenderad av ${percent} av tittarna'; + @override String get relatedTitles => 'Relaterade titlar'; + @override String get background => 'Bakgrund'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$sv extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$sv._(TranslationsSv root) : this._root = root, super.internal(root); @@ -2128,6 +2532,7 @@ class _Translations$services$names$sv extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2197,6 +2602,7 @@ extension on TranslationsSv { 'auth.waitingForAuth' => 'Väntar på autentisering...\nLogga in från din webbläsare.', 'auth.useBrowser' => 'Använd webbläsare', 'auth.or' => 'eller', + 'auth.connectToMediaBrowser' => ({required Object product}) => 'Anslut till ${product}', 'auth.useQuickConnect' => 'Använd Quick Connect', 'auth.quickConnectInstructions' => 'Öppna Quick Connect i Jellyfin och ange den här koden.', 'auth.quickConnectWaiting' => 'Väntar på godkännande…', @@ -2248,6 +2654,17 @@ extension on TranslationsSv { 'common.fullscreen' => 'Helskärm', 'common.exitFullscreen' => 'Avsluta helskärm', 'common.pressBackAgainToExit' => 'Tryck bakåt igen för att avsluta', + 'common.ratingSource.critic' => 'Kritiker', + 'common.ratingSource.audience' => 'Publik', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes-kritiker', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes-publik', 'screens.licenses' => 'Licenser', 'screens.switchProfile' => 'Byt profil', 'screens.subtitleStyling' => 'Utseende för undertexter', @@ -2284,6 +2701,7 @@ extension on TranslationsSv { 'settings.darkTheme' => 'Mörkt', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Biblioteksdensitet', + 'settings.displayScale' => 'Skalning', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Luftig', 'settings.tvCornerSpotlightBackdrop' => 'Bakgrundsbild för utvalt innehåll i hörnet', @@ -2333,6 +2751,11 @@ extension on TranslationsSv { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => 'Automatiskt (rekommenderas)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} MB minne är tillgängligt. En buffert på ${size} MB kan påverka uppspelningen.', + 'settings.playbackBuffer' => 'Uppspelningsbuffert', + 'settings.playbackBufferAuto' => 'Auto (rekommenderas)', + 'settings.playbackBufferLarge' => 'Stor', + 'settings.playbackBufferExtraLarge' => 'Extra stor', + 'settings.playbackBufferDescription' => 'Buffrar mer mot instabila anslutningar. Begränsas även av buffertstorleken.', 'settings.defaultQualityTitle' => 'Standardkvalitet', 'settings.musicQualityTitle' => 'Musikkvalitet', 'settings.subtitleStyling' => 'Utseende för undertexter', @@ -2366,6 +2789,9 @@ extension on TranslationsSv { 'settings.debugLoggingDescription' => 'Aktivera detaljerad loggning för felsökning', 'settings.viewLogs' => 'Visa loggar', 'settings.viewLogsDescription' => 'Visa appens loggar', + 'settings.clearImageCache' => 'Rensa bildcache', + 'settings.clearImageCacheDescription' => 'Rensa cachad grafik och miniatyrer. Bilder kan laddas långsammare tills de hämtas igen.', + 'settings.clearImageCacheSuccess' => 'Bildcachen har rensats', 'settings.resetSettings' => 'Återställ inställningarna', 'settings.resetSettingsDescription' => 'Återställ standardinställningarna. Det går inte att ångra.', 'settings.resetSettingsSuccess' => 'Inställningarna har återställts', @@ -2549,29 +2975,118 @@ extension on TranslationsSv { 'hotkeys.actions.skipMarker' => 'Hoppa över intro/eftertexter', 'hotkeys.actions.screenshot' => 'Ta skärmbild', 'fileInfo.title' => 'Filinformation', + 'fileInfo.overview' => 'Översikt', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Ljud', 'fileInfo.subtitles' => 'Undertexter', + 'fileInfo.images' => 'Inbäddade bilder', + 'fileInfo.dataStreams' => 'Dataströmmar', + 'fileInfo.lyrics' => 'Sångtexter', 'fileInfo.file' => 'Fil', + 'fileInfo.attachments' => 'Bilagor', + 'fileInfo.delivery' => 'Leverans', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Version ${index} av ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Fil ${index} av ${count}', + 'fileInfo.noStreams' => 'Servern rapporterade inga strömmar för den här filen.', + 'fileInfo.copyPath' => 'Kopiera sökväg', + 'fileInfo.pathCopied' => 'Filsökväg kopierad', 'fileInfo.codec' => 'Kodek', + 'fileInfo.codecTag' => 'Codec-tagg', 'fileInfo.resolution' => 'Upplösning', + 'fileInfo.codedResolution' => 'Kodad upplösning', 'fileInfo.bitrate' => 'Bithastighet', 'fileInfo.frameRate' => 'Bildfrekvens', + 'fileInfo.rotation' => 'Rotation', + 'fileInfo.comment' => 'Kommentar', + 'fileInfo.audioDescription' => 'Ljudbeskrivning', + 'fileInfo.headerCompression' => 'Headerkomprimering', + 'fileInfo.sidecarFile' => 'Sidecar-fil', + 'fileInfo.transportTimestamp' => 'Transporttidsstämpel', + 'fileInfo.displayOffset' => 'Visningsoffset', + 'fileInfo.previewFailureCode' => 'Kod för förhandsgranskningsfel', + 'fileInfo.previewRetries' => 'Omförsök för förhandsgranskning', 'fileInfo.aspectRatio' => 'Bildförhållande', + 'fileInfo.pixelAspectRatio' => 'Pixelförhållande', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Nivå', 'fileInfo.bitDepth' => 'Bitdjup', + 'fileInfo.pixelFormat' => 'Pixelformat', 'fileInfo.colorSpace' => 'Färgrymd', 'fileInfo.colorRange' => 'Färgområde', 'fileInfo.colorPrimaries' => 'Färgprimärer', + 'fileInfo.colorTransfer' => 'Färgöverföring', 'fileInfo.chromaSubsampling' => 'Krominansnedsampling', + 'fileInfo.chromaLocation' => 'Kroma-placering', + 'fileInfo.scanType' => 'Skanningsläge', + 'fileInfo.interlaced' => 'Interlaced', + 'fileInfo.anamorphic' => 'Anamorfisk', + 'fileInfo.referenceFrames' => 'Referensbildrutor', + 'fileInfo.dynamicRange' => 'Dynamiskt omfång', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision-nivå', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision-version', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision-lager', + 'fileInfo.baseLayerCompatibility' => 'Kompatibilitet för baslager', + 'fileInfo.avcBitstream' => 'AVC-bitström', + 'fileInfo.nalLengthSize' => 'NAL-längdstorlek', + 'fileInfo.scalingMatrix' => 'Anpassad skalningsmatris', + 'fileInfo.streamIdentifier' => 'Strömidentifierare', + 'fileInfo.streamIndex' => 'Strömindex', + 'fileInfo.streamId' => 'Ström-ID', + 'fileInfo.language' => 'Språk', + 'fileInfo.languageCode' => 'Språkkod', + 'fileInfo.streamTitle' => 'Spårnamn', 'fileInfo.channels' => 'Kanaler', + 'fileInfo.sampleRate' => 'Samplingsfrekvens', + 'fileInfo.spatialAudio' => 'Rumsligt ljud', + 'fileInfo.textBased' => 'Textbaserad', + 'fileInfo.subtitleFormat' => 'Sidecar-format', + 'fileInfo.provider' => 'Leverantör', + 'fileInfo.matchScore' => 'Matchningspoäng', + 'fileInfo.externalDelivery' => 'Kan levereras separat', + 'fileInfo.sidecarPath' => 'Sidecar-sökväg', + 'fileInfo.sourceStream' => 'Kopierad från', + 'fileInfo.temporary' => 'Tillfällig', + 'fileInfo.timeBase' => 'Tidsbas', 'fileInfo.overallBitrate' => 'Total bithastighet', 'fileInfo.path' => 'Sökväg', + 'fileInfo.fileName' => 'Filnamn', 'fileInfo.size' => 'Storlek', + 'fileInfo.totalSize' => 'Total storlek', 'fileInfo.container' => 'Container', 'fileInfo.duration' => 'Varaktighet', + 'fileInfo.previewThumbnails' => 'Förhandsgranskningsminiatyrer', + 'fileInfo.previewIndex' => 'Förhandsgranskningsindex', + 'fileInfo.packetLength' => 'Paketlängd', + 'fileInfo.filePresent' => 'Fil finns', + 'fileInfo.fileReadable' => 'Läsbar av servern', + 'fileInfo.streamPath' => 'Strömsökväg', 'fileInfo.optimizedForStreaming' => 'Optimerad för streaming', 'fileInfo.has64bitOffsets' => '64-bitars offsetvärden', + 'fileInfo.protocol' => 'Protokoll', + 'fileInfo.mediaType' => 'Mediatyp', + 'fileInfo.sourceKind' => 'Källtyp', + 'fileInfo.optimizedVersion' => 'Optimerad version', + 'fileInfo.optimizationTarget' => 'Optimeringsmål', + 'fileInfo.deletedAt' => 'Raderad', + 'fileInfo.remoteSource' => 'Fjärrkälla', + 'fileInfo.infiniteStream' => 'Oändlig ström', + 'fileInfo.directPlay' => 'Direktuppspelning', + 'fileInfo.directStream' => 'Direktströmning', + 'fileInfo.transcoding' => 'Transkodning', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Versions-ID', + 'fileInfo.fileId' => 'Fil-ID', + 'fileInfo.defaultAudioTrack' => 'Standardljudspår', + 'fileInfo.defaultSubtitleTrack' => 'Standardundertextspår', + 'fileInfo.subtitlesOff' => 'Av', + 'fileInfo.flagDefault' => 'Standard', + 'fileInfo.flagForced' => 'Forcerad', + 'fileInfo.flagSelected' => 'Vald', + 'fileInfo.flagExternal' => 'Extern', + 'fileInfo.flagHearingImpaired' => 'Hörselskadade', + 'fileInfo.flagDub' => 'Dubbad', + 'fileInfo.flagOriginal' => 'Original', 'mediaMenu.markAsWatched' => 'Markera som sedd', 'mediaMenu.markAsUnwatched' => 'Markera som osedd', 'mediaMenu.removeFromContinueWatching' => 'Ta bort från Fortsätt titta', @@ -2580,7 +3095,28 @@ extension on TranslationsSv { 'mediaMenu.shufflePlay' => 'Blanda uppspelning', 'mediaMenu.shuffleNotAvailableOffline' => 'Blandad uppspelning är inte tillgänglig offline', 'mediaMenu.fileInfo' => 'Filinformation', + 'mediaMenu.deleteEpisodeFromServer' => 'Ta bort avsnitt från servern', + 'mediaMenu.deleteSeasonFromServer' => 'Ta bort säsong från servern', + 'mediaMenu.deleteShowFromServer' => 'Ta bort serie från servern', + 'mediaMenu.deleteMovieFromServer' => 'Ta bort film från servern', + 'mediaMenu.deleteEpisodeTitle' => 'Ta bort det här avsnittet?', + 'mediaMenu.deleteSeasonTitle' => 'Ta bort den här säsongen?', + 'mediaMenu.deleteShowTitle' => 'Ta bort den här serien?', + 'mediaMenu.deleteMovieTitle' => 'Ta bort den här filmen?', + 'mediaMenu.deleteEpisodeConfirm' => 'Ta bort avsnitt', + 'mediaMenu.deleteSeasonConfirm' => 'Ta bort säsong', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Ta bort serie', + 'mediaMenu.deleteMovieConfirm' => 'Ta bort film', + 'mediaMenu.deleteAnyway' => 'Ta bort ändå', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => 'Ta bort ${title} permanent från servern?', 'mediaMenu.deleteMultipleWarning' => 'Detta omfattar alla avsnitt och deras filer.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: 'Detta tar bort ${n} avsnitt i den, och dess fil.', other: 'Detta tar bort alla ${n} avsnitt i den, och deras filer.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: 'Detta objekt lagras som ${n} fil, som kommer att tas bort.', other: 'Detta objekt lagras i ${n} filer, och alla kommer att tas bort.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: '${n} annat avsnitt lagras i samma fil och kommer också att tas bort:', other: '${n} andra avsnitt lagras i samma fil och kommer också att tas bort:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy kunde inte kontrollera vilka filer detta tar bort, så det kan ta bort mer än objektet ovan. Avbryt och försök igen, eller ta bort ändå.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Din server tillhandahöll inte filinformation för detta objekt, så Plezy kan inte kontrollera vilka filer detta tar bort. Det kan ta bort mer än objektet ovan.', 'mediaMenu.mediaDeletedSuccessfully' => 'Medieobjektet har tagits bort', 'mediaMenu.mediaFailedToDelete' => 'Det gick inte att ta bort medieobjektet', 'mediaMenu.rate' => 'Betygsätt', @@ -2646,6 +3182,9 @@ extension on TranslationsSv { 'videoControls.playNext' => 'Spela nästa', 'videoControls.playButton' => 'Spela', 'videoControls.pauseButton' => 'Pausa', + 'videoControls.playbackPaused' => 'Pausad', + 'videoControls.playbackResumed' => 'Spelar', + 'videoControls.loadingVideo' => 'Laddar video', 'videoControls.showPlaybackControls' => 'Visa uppspelningskontroller', 'videoControls.hidePlaybackControls' => 'Dölj uppspelningskontroller', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder', @@ -2700,8 +3239,6 @@ extension on TranslationsSv { 'videoControls.subtitleDownloaded' => 'Undertexten har laddats ned', 'videoControls.subtitleDownloadedNotApplied' => 'Undertexten laddades ned men kunde inte väljas', 'videoControls.subtitleDownloadFailed' => 'Det gick inte att ladda ned undertexten', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => 'Sök språk...', 'messages.markedAsWatched' => 'Markerad som sedd', 'messages.markedAsUnwatched' => 'Markerad som osedd', @@ -2711,6 +3248,7 @@ extension on TranslationsSv { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: 'Tog automatiskt bort ${n} sedd nedladdning', other: 'Tog automatiskt bort ${n} sedda nedladdningar', ), 'messages.removedFromContinueWatching' => 'Borttagen från Fortsätt titta', 'messages.errorLoading' => ({required Object error}) => 'Fel: ${error}', + 'messages.searchPartialResults' => 'Vissa mediaservrar kunde inte sökas. Visar tillgängliga resultat.', 'messages.streamInterrupted' => 'Strömmen avbröts. Tryck på uppspelning eller spola för att försöka igen.', 'messages.liveStreamInterrupted' => 'Liveströmmen avbröts. Tryck på uppspelning för att försöka igen.', 'messages.fileInfoNotAvailable' => 'Filinformation är inte tillgänglig', @@ -2749,6 +3287,8 @@ extension on TranslationsSv { 'messages.switchingToCompatiblePlayer' => 'Byter till kompatibel spelare...', 'messages.serverLimitTitle' => 'Uppspelningen misslyckades', 'messages.serverLimitBody' => 'Serverfel (HTTP 500). En bandbredds-/transkodningsgräns avvisade troligen sessionen. Be ägaren justera den.', + 'messages.mediaUnreadableTitle' => 'Filen är otillgänglig', + 'messages.mediaUnreadableBody' => 'Servern hittade objektet men kunde inte läsa dess fil (HTTP 404). Filen har troligen flyttats, tagits bort eller så är dess lagring offline. Be serverägaren kontrollera filen och skanna om biblioteket.', 'messages.logsUploaded' => 'Loggarna har laddats upp', 'messages.logsUploadFailed' => 'Det gick inte att ladda upp loggarna', 'messages.logId' => 'Logg-ID', @@ -2857,6 +3397,8 @@ extension on TranslationsSv { 'connections.sessionExpiredOne' => ({required Object name}) => 'Sessionen har gått ut för ${name}', 'connections.sessionExpiredMany' => ({required Object count}) => 'Sessionen har gått ut för ${count} servrar', 'connections.signInAgain' => 'Logga in igen', + 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Redigera ${product}-anslutning', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Lägg till eller ta bort URL:er för ${serverName}. Plezy använder den nåbara URL:en med lägst latens.', 'discover.title' => 'Upptäck', 'discover.noContentAvailable' => 'Inget innehåll tillgängligt', 'discover.addMediaToLibraries' => 'Lägg till medieinnehåll i dina bibliotek', @@ -2882,6 +3424,7 @@ extension on TranslationsSv { 'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min kvar', 'discover.moreLikeThis' => 'Mer liknande innehåll', 'errors.searchFailed' => ({required Object error}) => 'Sökningen misslyckades: ${error}', + 'errors.searchUnavailable' => 'Sökningen kunde inte nå någon medieserver.', 'errors.connectionTimeout' => ({required Object context}) => 'Anslutningen tog för lång tid när ${context} lästes in', 'errors.connectionFailed' => 'Det gick inte att ansluta till medieservern', 'errors.unableToLoad' => ({required Object context}) => 'Det gick inte att läsa in ${context}. Försök igen.', @@ -2989,6 +3532,36 @@ extension on TranslationsSv { 'logs.clearLogs' => 'Rensa loggar', 'logs.copyLogs' => 'Kopiera loggar', 'logs.uploadLogs' => 'Ladda upp loggar', + 'startup.failedTitle' => 'Plezy kunde inte starta', + 'startup.failedBody' => 'Något gick fel under starten. Detaljerna nedan visar vad som misslyckades.', + 'startup.failedBodyRepairable' => 'Plezys sparade inställningsfil är skadad och måste byggas om innan Plezy kan starta. Att försöka igen hjälper inte — välj Reparera lagring.', + 'startup.phaseLabel' => 'Steg', + 'startup.showDetails' => 'Visa detaljer', + 'startup.hideDetails' => 'Dölj detaljer', + 'startup.copyDetails' => 'Kopiera detaljer', + 'startup.detailsCopied' => 'Detaljer kopierade till urklipp', + 'startup.uploadDetails' => 'Ladda upp detaljer', + 'startup.repairStorage' => 'Reparera lagring', + 'startup.repairTitle' => 'Reparera lagrade data?', + 'startup.repairBodyCommon' => 'Plezys inställningsfil är skadad och kan inte läsas. Reparationen återställer alla inställningar till standard.', + 'startup.repairBodyOneCredential' => 'En sparad inloggning är skadad och kan inte läsas. Reparationen tar bort endast den; dina andra inställningar lämnas orörda.', + 'startup.repairBodySignInsKept' => 'Dina servrar och profiler bör förbli inloggade.', + 'startup.repairBodySignInsLost' => 'Nyckeln som skyddar dina sparade inloggningar kan inte återställas från den här filen, så du måste logga in på varje server och profil igen. Inget på din medieserver påverkas.', + 'startup.repairBodySessionsUncertain' => 'Trackers (MAL, AniList, Simkl, Trakt) och Seerr lagras separat och kan överleva eller inte. Plezy berättar exakt vad som behållits.', + 'startup.repairConfirm' => 'Reparera', + 'startup.repairSucceeded' => 'Lagringen reparerad', + 'startup.repairNeedsRestart' => 'Lagringen reparerad — omstart krävs', + 'startup.restartRequiredBody' => 'Dina data reparerades, men Plezy måste starta om innan de kan användas. Stäng Plezy och öppna det igen.', + 'startup.quitPlezy' => 'Avsluta Plezy', + 'startup.repairFailed' => 'Reparationen misslyckades', + 'startup.repairKeptSignIns' => 'Dina servrar och profiler är fortfarande inloggade.', + 'startup.repairLostSignIns' => 'Nyckeln som skyddar dina sparade inloggningar kunde inte återställas. Du måste logga in på varje server och profil igen.', + 'startup.repairLostSessions' => 'Minst en tracker- eller Seerr-anslutning förlorades och måste återanslutas.', + 'startup.backupTitle' => 'En kopia av den skadade filen sparades', + 'startup.backupWarning' => 'Den innehåller dina inloggningsuppgifter. Ladda inte upp eller dela den.', + 'startup.deleteBackup' => 'Ta bort kopia', + 'startup.backupDeleted' => 'Kopian borttagen.', + 'startup.previousFailureTitle' => 'Plezy kunde inte starta förra gången', 'licenses.relatedPackages' => 'Relaterade paket', 'licenses.license' => 'Licens', 'licenses.licenseNumber' => ({required Object number}) => 'Licens ${number}', @@ -3032,6 +3605,113 @@ extension on TranslationsSv { 'explore.searchEmpty' => ({required Object query}) => 'Inga resultat för "${query}"', 'explore.searchPrompt' => ({required Object source}) => 'Sök efter filmer och serier på ${source}.', 'explore.searchFailed' => 'Sökningen misslyckades. Kontrollera din anslutning och försök igen.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} populär', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} sänds nu', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} bäst betygsatta', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} mest favoritmarkerade', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} trendar', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} i ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} tittar nu', + 'explore.badge.available' => 'Tillgänglig', + 'explore.badge.partiallyAvailable' => 'Delvis tillgänglig', + 'explore.badge.availableIn4k' => '4K tillgängligt', + 'explore.badge.requested' => 'Begärd', + 'explore.badge.pendingApproval' => 'Väntar på godkännande', + 'explore.badge.processing' => 'Bearbetas', + 'explore.badge.declined' => 'Avvisad', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Begäran misslyckades', + 'explore.badge.requested4k' => '4K begärd', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} säsonger', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Avsnitt ${episode} om ${duration}', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Nästa om ${duration}', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} avsn.', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} min/avsn', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} listade', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} tittade idag', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} tittade denna vecka', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} tittade denna månad', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} tittade i år', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} tittare', + 'explore.stats.planning' => ({required Object n}) => '${n} planerar att titta', + 'explore.stats.favorited' => ({required Object n}) => '${n} favoriter', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} hoppade av', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: '${n} kommentar', other: '${n} kommentarer', ), + 'explore.stats.votes' => ({required Object n}) => '${n} röster', + 'explore.stats.watching' => ({required Object n}) => '${n} tittar på den', + 'explore.stats.completed' => ({required Object n}) => '${n} avslutade', + 'explore.stats.onHold' => ({required Object n}) => '${n} på paus', + 'explore.stats.dropped' => ({required Object n}) => '${n} hoppade av', + 'explore.season.winter' => 'Vinter', + 'explore.season.spring' => 'Vår', + 'explore.season.summer' => 'Sommar', + 'explore.season.fall' => 'Höst', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV-short', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Special', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musik', + 'explore.format.other' => 'Annat', + 'explore.sourceMaterial.original' => 'Original', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Spel', + 'explore.sourceMaterial.webComic' => 'Webbserie', + 'explore.sourceMaterial.musicRelease' => 'Musik', + 'explore.sourceMaterial.otherMedia' => 'Annat', + 'explore.creditRole.director' => 'Regissör', + 'explore.creditRole.writer' => 'Författare', + 'explore.creditRole.producer' => 'Producent', + 'explore.creditRole.creator' => 'Skapare', + 'explore.creditRole.composer' => 'Kompositör', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Uppföljare', + 'explore.relation.sideStory' => 'Bihistoria', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternativ version', + 'explore.relation.summary' => 'Sammanfattning', + 'explore.relation.parentStory' => 'Huvudberättelse', + 'explore.relation.adaptation' => 'Adaption', + 'explore.relation.other' => 'Relaterat', + 'explore.broadcast' => ({required Object day, required Object time}) => 'Sänds ${day} kl. ${time}', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => 'Sänds ${day} kl. ${time} ${timezone}', + 'explore.detail.originalTitle' => 'Originaltitel', + 'explore.detail.alsoKnownAs' => 'Även känd som', + 'explore.detail.studios' => 'Studior', + 'explore.detail.country' => 'Land', + 'explore.detail.language' => 'Språk', + 'explore.detail.released' => 'Släppt', + 'explore.detail.physicalRelease' => 'På skiva', + 'explore.detail.ended' => 'Avslutad', + 'explore.detail.addedOn' => ({required Object date}) => 'Tillagd ${date}', + 'explore.detail.yourRating' => 'Ditt betyg', + 'explore.detail.budget' => 'Budget', + 'explore.detail.revenue' => 'Box office', + 'explore.detail.contentAdvisory' => 'Åldersvägledning', + 'explore.detail.tags' => 'Taggar', + 'explore.detail.revealSpoilerTags' => 'Visa spoiler-taggar', + 'explore.detail.links' => 'Länkar', + 'explore.detail.watchOn' => 'Titta på', + 'explore.detail.watchTrailer' => 'Titta på trailer', + 'explore.detail.openOn' => ({required Object site}) => 'Öppna på ${site}', + 'explore.detail.crew' => 'Besättning', + 'explore.detail.ratings' => 'Betyg', + 'explore.detail.schedule' => 'Schema', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: 'Rekommenderad av ${n} användare', other: 'Rekommenderad av ${n} användare', ), + 'explore.detail.recommendedBy' => ({required Object who}) => 'Rekommenderad av ${who}', + 'explore.detail.favoritedBy' => ({required Object who}) => 'Favoritmarkerad av ${who}', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} inte sända ännu', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Rekommenderad av ${percent} av tittarna', + 'explore.detail.relatedTitles' => 'Relaterade titlar', + 'explore.detail.background' => 'Bakgrund', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: '${n} resultat', other: '${n} resultat', ), 'liveTv.title' => 'Live-TV', 'liveTv.guide' => 'Programguide', 'liveTv.noChannels' => 'Inga kanaler tillgängliga', @@ -3214,8 +3894,6 @@ extension on TranslationsSv { 'watchTogether.relayUnreachable' => 'Reläservern kan inte nås. Din internetleverantör kan blockera Titta tillsammans.', 'watchTogether.reconnectingToHost' => 'Återansluter till värden...', 'watchTogether.currentPlayback' => 'Aktuell uppspelning', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => 'Gå med i aktuell uppspelning', 'watchTogether.joinCurrentPlaybackDescription' => 'Hoppa tillbaka till det värden tittar på just nu', 'watchTogether.failedToOpenCurrentPlayback' => 'Kunde inte öppna aktuell uppspelning', @@ -3284,9 +3962,15 @@ extension on TranslationsSv { 'downloads.editSyncRule' => 'Redigera synkregel', 'downloads.removeSyncRule' => 'Ta bort synkregel', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Sluta synkronisera "${title}"? Nedladdade avsnitt behålls.', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => 'Sluta synkronisera "${title}"?', + 'downloads.deleteSyncRuleDownloads' => 'Ta även bort associerade nedladdningar', + 'downloads.deleteSyncRuleDownloadsDescription' => 'Nedladdningar som används av en annan synkregel eller profil behålls.', 'downloads.syncRuleCreated' => ({required Object count}) => 'Synkregel skapad — behåller ${count} osedda avsnitt', 'downloads.syncRuleUpdated' => 'Synkregel uppdaterad', 'downloads.syncRuleRemoved' => 'Synkregel borttagen', + 'downloads.syncRuleAndDownloadsRemoved' => 'Synkregel och associerade nedladdningar borttagna', + 'downloads.syncRuleCleanupBusy' => 'Synkregler uppdateras just nu. Försök igen om en liten stund.', + 'downloads.syncRuleCleanupUnavailable' => 'Associerade nedladdningar kunde inte identifieras på ett säkert sätt. Återanslut servern och försök igen, eller ta bort regeln utan att ta bort nedladdningar.', 'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => 'Synkroniserade ${count} nya avsnitt för ${title}', 'downloads.activeSyncRules' => 'Synkregler', 'downloads.noSyncRules' => 'Inga synkregler', @@ -3449,6 +4133,8 @@ extension on TranslationsSv { 'performanceOverlay.dvRpus' => 'DV-RPU:er', 'performanceOverlay.dvRpuAverage' => 'DV-RPU, genomsnitt', 'performanceOverlay.dvSampleAverage' => 'DV-sampling, genomsnitt', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Max luma', 'performanceOverlay.minLuma' => 'Min luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3618,6 +4304,7 @@ extension on TranslationsSv { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Aktivera Plezy på ${service}', 'services.deviceCode.body' => ({required Object url}) => 'Besök ${url} och ange den här koden:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Öppna ${service} för att aktivera', @@ -3641,9 +4328,12 @@ extension on TranslationsSv { 'services.libraryFilter.modeHintWhitelist' => 'Synkronisera endast de bibliotek som markeras nedan.', 'services.libraryFilter.libraries' => 'Bibliotek', 'services.libraryFilter.noLibraries' => 'Inga bibliotek tillgängliga', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Lägg till ${product}-server', 'addServer.serverUrls' => 'Server-URL:er', 'addServer.serverUrlsHelper' => 'Du kan ange flera URL:er avgränsade med kommatecken.', 'addServer.findServer' => 'Hitta server', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Söker efter lokala ${product}-servrar...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Lokala ${product}-servrar', 'addServer.username' => 'Användarnamn', 'addServer.password' => 'Lösenord', 'addServer.signIn' => 'Logga in', @@ -3655,11 +4345,15 @@ extension on TranslationsSv { 'addServer.addPlexTitle' => 'Logga in med Plex', 'addServer.pinExpired' => 'PIN-koden gick ut innan inloggning. Försök igen.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunde inte registrera kontot: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Ange din ${product}-server-URL', 'addServer.addConnectionTitle' => 'Lägg till anslutning', 'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Lägg till i ${name}', 'addServer.signInWithPlexCard' => 'Logga in med Plex', 'addServer.signInWithPlexCardSubtitle' => 'Auktorisera den här enheten. Delade servrar läggs till.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Auktorisera ett Plex-konto. Home-användare blir profiler.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Anslut till ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Ange din server-URL, användarnamn och lösenord.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Logga in på din ${product}-server. Knyts till ${name}.', 'addServer.borrowFromAnotherProfile' => 'Låna från en annan profil', 'addServer.borrowFromAnotherProfileSubtitle' => 'Återanvänd en annan profils anslutning. PIN-skyddade profiler kräver en PIN.', _ => null, diff --git a/lib/i18n/strings_tr.g.dart b/lib/i18n/strings_tr.g.dart index 6328d521..5135e99c 100644 --- a/lib/i18n/strings_tr.g.dart +++ b/lib/i18n/strings_tr.g.dart @@ -67,6 +67,7 @@ class TranslationsTr extends Translations with BaseTranslations 'Doğrulama bekleniyor...\nTarayıcınızdan giriş yapın.'; @override String get useBrowser => 'Tarayıcı kullan'; @override String get or => 'veya'; + @override String connectToMediaBrowser({required Object product}) => '${product} ile Bağlan'; @override String get useQuickConnect => 'Hızlı Bağlantıyı Kullan'; @override String get quickConnectInstructions => 'Jellyfin\'de Hızlı Bağlantı\'yı açın ve bu kodu girin.'; @override String get quickConnectWaiting => 'Onay bekleniyor…'; @@ -175,6 +177,7 @@ class _Translations$common$tr extends Translations$common$en { @override String get fullscreen => 'Tam Ekran'; @override String get exitFullscreen => 'Tam Ekrandan Çık'; @override String get pressBackAgainToExit => 'Çıkmak için tekrar geri tuşuna basın'; + @override late final _Translations$common$ratingSource$tr ratingSource = _Translations$common$ratingSource$tr._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$tr extends Translations$settings$en { @override String get darkTheme => 'Koyu'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Kitaplık Yoğunluğu'; + @override String get displayScale => 'Ekran ölçeği'; @override String get compact => 'Sıkışık'; @override String get comfortable => 'Rahat'; @override String get tvCornerSpotlightBackdrop => 'Köşe Öne Çıkan Arka Plan'; @@ -287,6 +291,11 @@ class _Translations$settings$tr extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => 'Otomatik (Önerilen)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB bellek mevcut. ${size}MB arabellek oynatmayı etkileyebilir.'; + @override String get playbackBuffer => 'Oynatma Tamponu'; + @override String get playbackBufferAuto => 'Otomatik (Önerilen)'; + @override String get playbackBufferLarge => 'Büyük'; + @override String get playbackBufferExtraLarge => 'Ekstra Büyük'; + @override String get playbackBufferDescription => 'Kararsız bağlantılara karşı daha fazla tamponlar. Tampon Boyutu ile de sınırlıdır.'; @override String get defaultQualityTitle => 'Varsayılan Kalite'; @override String get musicQualityTitle => 'Müzik Kalitesi'; @override String get subtitleStyling => 'Altyazı Biçimlendirmesi'; @@ -509,29 +518,118 @@ class _Translations$fileInfo$tr extends Translations$fileInfo$en { // Translations @override String get title => 'Dosya Bilgisi'; + @override String get overview => 'Genel Bakış'; @override String get video => 'Video'; @override String get audio => 'Ses'; @override String get subtitles => 'Altyazılar'; + @override String get images => 'Gömülü Görseller'; + @override String get dataStreams => 'Veri Akışları'; + @override String get lyrics => 'Şarkı Sözleri'; @override String get file => 'Dosya'; + @override String get attachments => 'Ekler'; + @override String get delivery => 'Teslimat'; + @override String versionCounter({required Object index, required Object count}) => 'Sürüm ${index} / ${count}'; + @override String fileCounter({required Object index, required Object count}) => 'Dosya ${index} / ${count}'; + @override String get noStreams => 'Sunucu bu dosya için hiçbir akış bildirmedi.'; + @override String get copyPath => 'Yolu Kopyala'; + @override String get pathCopied => 'Dosya yolu kopyalandı'; @override String get codec => 'Kodek'; + @override String get codecTag => 'Codec Etiketi'; @override String get resolution => 'Çözünürlük'; + @override String get codedResolution => 'Kodlanmış Çözünürlük'; @override String get bitrate => 'Bit Hızı (Bitrate)'; @override String get frameRate => 'Kare Hızı'; + @override String get rotation => 'Döndürme'; + @override String get comment => 'Yorum'; + @override String get audioDescription => 'Sesli Betimleme'; + @override String get headerCompression => 'Başlık Sıkıştırması'; + @override String get sidecarFile => 'Yan Dosya'; + @override String get transportTimestamp => 'İletim Zaman Damgası'; + @override String get displayOffset => 'Görüntü Ofseti'; + @override String get previewFailureCode => 'Önizleme Hata Kodu'; + @override String get previewRetries => 'Önizleme Denemeleri'; @override String get aspectRatio => 'En Boy Oranı'; + @override String get pixelAspectRatio => 'Piksel En Boy Oranı'; @override String get profile => 'Profil'; + @override String get level => 'Seviye'; @override String get bitDepth => 'Bit Derinliği'; + @override String get pixelFormat => 'Piksel Biçimi'; @override String get colorSpace => 'Renk Alanı'; @override String get colorRange => 'Renk Aralığı'; @override String get colorPrimaries => 'Ana Renkler'; + @override String get colorTransfer => 'Renk Aktarımı'; @override String get chromaSubsampling => 'Renk Alt Örneklemesi'; + @override String get chromaLocation => 'Chroma Konumu'; + @override String get scanType => 'Tarama Türü'; + @override String get interlaced => 'Geçmeli'; + @override String get anamorphic => 'Anamorfik'; + @override String get referenceFrames => 'Referans Kareler'; + @override String get dynamicRange => 'Dinamik Aralık'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision Seviyesi'; + @override String get dolbyVisionVersion => 'Dolby Vision Sürümü'; + @override String get dolbyVisionLayers => 'Dolby Vision Katmanları'; + @override String get baseLayerCompatibility => 'Temel Katman Uyumluluğu'; + @override String get avcBitstream => 'AVC Bit Akışı'; + @override String get nalLengthSize => 'NAL Uzunluk Boyutu'; + @override String get scalingMatrix => 'Özel Ölçekleme Matrisi'; + @override String get streamIdentifier => 'Akış Tanımlayıcısı'; + @override String get streamIndex => 'Akış Dizini'; + @override String get streamId => 'Akış Kimliği'; + @override String get language => 'Dil'; + @override String get languageCode => 'Dil Kodu'; + @override String get streamTitle => 'Parça Başlığı'; @override String get channels => 'Kanallar'; + @override String get sampleRate => 'Örnekleme Hızı'; + @override String get spatialAudio => 'Uzamsal Ses'; + @override String get textBased => 'Metin Tabanlı'; + @override String get subtitleFormat => 'Yan Dosya Biçimi'; + @override String get provider => 'Sağlayıcı'; + @override String get matchScore => 'Eşleşme Puanı'; + @override String get externalDelivery => 'Ayrı Olarak Sunulabilir'; + @override String get sidecarPath => 'Yan Dosya Yolu'; + @override String get sourceStream => 'Kopyalandığı Yer'; + @override String get temporary => 'Geçici'; + @override String get timeBase => 'Zaman Tabanı'; @override String get overallBitrate => 'Genel Bit Hızı'; @override String get path => 'Yol'; + @override String get fileName => 'Dosya Adı'; @override String get size => 'Boyut'; + @override String get totalSize => 'Toplam Boyut'; @override String get container => 'Kapsayıcı'; @override String get duration => 'Süre'; + @override String get previewThumbnails => 'Önizleme Küçük Resimleri'; + @override String get previewIndex => 'Önizleme Dizini'; + @override String get packetLength => 'Paket Uzunluğu'; + @override String get filePresent => 'Dosya Mevcut'; + @override String get fileReadable => 'Sunucu Tarafından Okunabilir'; + @override String get streamPath => 'Akış Yolu'; @override String get optimizedForStreaming => 'Akış İçin Optimize Edilmiş'; @override String get has64bitOffsets => '64-bit Ofsetler'; + @override String get protocol => 'Protokol'; + @override String get mediaType => 'Medya Türü'; + @override String get sourceKind => 'Kaynak Türü'; + @override String get optimizedVersion => 'Optimize Edilmiş Sürüm'; + @override String get optimizationTarget => 'Optimizasyon Hedefi'; + @override String get deletedAt => 'Silindi'; + @override String get remoteSource => 'Uzak Kaynak'; + @override String get infiniteStream => 'Sonsuz Akış'; + @override String get directPlay => 'Doğrudan Oynatma'; + @override String get directStream => 'Doğrudan Akış'; + @override String get transcoding => 'Kod Dönüştürme'; + @override String get etag => 'ETag'; + @override String get versionId => 'Sürüm Kimliği'; + @override String get fileId => 'Dosya Kimliği'; + @override String get defaultAudioTrack => 'Varsayılan Ses Parçası'; + @override String get defaultSubtitleTrack => 'Varsayılan Altyazı Parçası'; + @override String get subtitlesOff => 'Kapalı'; + @override String get flagDefault => 'Varsayılan'; + @override String get flagForced => 'Zorunlu'; + @override String get flagSelected => 'Seçili'; + @override String get flagExternal => 'Harici'; + @override String get flagHearingImpaired => 'İşitme Engelliler İçin'; + @override String get flagDub => 'Dublaj'; + @override String get flagOriginal => 'Orijinal'; } // Path: mediaMenu @@ -549,7 +647,35 @@ class _Translations$mediaMenu$tr extends Translations$mediaMenu$en { @override String get shufflePlay => 'Karışık Oynat'; @override String get shuffleNotAvailableOffline => 'Karışık oynatma çevrimdışıyken kullanılamaz'; @override String get fileInfo => 'Dosya Bilgisi'; + @override String get deleteEpisodeFromServer => 'Bölümü sunucudan sil'; + @override String get deleteSeasonFromServer => 'Sezonu sunucudan sil'; + @override String get deleteShowFromServer => 'Diziyi sunucudan sil'; + @override String get deleteMovieFromServer => 'Filmi sunucudan sil'; + @override String get deleteEpisodeTitle => 'Bu bölüm silinsin mi?'; + @override String get deleteSeasonTitle => 'Bu sezon silinsin mi?'; + @override String get deleteShowTitle => 'Bu dizi silinsin mi?'; + @override String get deleteMovieTitle => 'Bu film silinsin mi?'; + @override String get deleteEpisodeConfirm => 'Bölümü Sil'; + @override String get deleteSeasonConfirm => 'Sezonu Sil'; + @override String get deleteShowConfirm => 'Diziyi Sil'; + @override String get deleteMovieConfirm => 'Filmi Sil'; + @override String get deleteAnyway => 'Yine de Sil'; + @override String confirmDeleteTarget({required Object title}) => '${title} sunucunuzdan kalıcı olarak silinsin mi?'; @override String get deleteMultipleWarning => 'Bu işlem tüm bölümleri ve dosyalarını içerir.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: 'Bu, içindeki ${n} bölümü ve dosyasını siler.', + other: 'Bu, içindeki ${n} bölümü ve dosyalarını siler.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: 'Bu öge ${n} dosya olarak saklanıyor ve silinecek.', + other: 'Bu öge ${n} dosyaya bölünmüş olarak saklanıyor ve hepsi silinecek.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: '${n} başka bölüm aynı dosyada saklanıyor ve o da silinecek:', + other: '${n} başka bölüm aynı dosyada saklanıyor ve onlar da silinecek:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy bunun hangi dosyaları sileceğini kontrol edemedi, bu yüzden yukarıda adı geçen ögeden daha fazlasını silebilir. İptal edip tekrar deneyin veya yine de silin.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Sunucunuz bu öge için dosya ayrıntıları sağlamadı, bu yüzden Plezy bunun hangi dosyaları sileceğini kontrol edemiyor. Yukarıda adı geçen ögeden daha fazlasını silebilir.'; @override String get mediaDeletedSuccessfully => 'Medya ögesi başarıyla silindi'; @override String get mediaFailedToDelete => 'Medya ögesi silinemedi'; @override String get rate => 'Oyla'; @@ -660,6 +786,9 @@ class _Translations$videoControls$tr extends Translations$videoControls$en { @override String get playNext => 'Sonrakini Oynat'; @override String get playButton => 'Oynat'; @override String get pauseButton => 'Duraklat'; + @override String get playbackPaused => 'Duraklatıldı'; + @override String get playbackResumed => 'Oynatılıyor'; + @override String get loadingVideo => 'Video yükleniyor'; @override String get showPlaybackControls => 'Oynatma kontrollerini göster'; @override String get hidePlaybackControls => 'Oynatma kontrollerini gizle'; @override String seekBackwardButton({required Object seconds}) => '${seconds} saniye geri sar'; @@ -768,6 +897,8 @@ class _Translations$messages$tr extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Uyumlu oynatıcıya geçiliyor...'; @override String get serverLimitTitle => 'Oynatma başarısız oldu'; @override String get serverLimitBody => 'Sunucu hatası (HTTP 500). Muhtemelen bir bant genişliği/kod dönüştürme sınırı bu oturumu reddetti. Sunucu sahibinden bunu ayarlamasını isteyin.'; + @override String get mediaUnreadableTitle => 'Dosya kullanılamıyor'; + @override String get mediaUnreadableBody => 'Sunucu bu ögeyi buldu ancak dosyasını okuyamadı (HTTP 404). Dosya büyük olasılıkla taşındı, silindi veya depolama alanı çevrimdışı. Sunucu sahibinden dosyayı kontrol edip kitaplığı yeniden taramasını isteyin.'; @override String get logsUploaded => 'Günlükler yüklendi'; @override String get logsUploadFailed => 'Günlükler yüklenemedi'; @override String get logId => 'Günlük Kimliği (ID)'; @@ -921,6 +1052,8 @@ class _Translations$connections$tr extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => '${name} için oturum süresi doldu'; @override String sessionExpiredMany({required Object count}) => '${count} sunucu için oturum süresi doldu'; @override String get signInAgain => 'Tekrar giriş yap'; + @override String editMediaBrowserTitle({required Object product}) => '${product} bağlantısını düzenle'; + @override String editMediaBrowserIntro({required Object serverName}) => '${serverName} için URL ekleyin veya kaldırın. Plezy, erişilebilir olan en düşük gecikmeli URL\'yi kullanacak.'; } // Path: discover @@ -1082,6 +1215,45 @@ class _Translations$logs$tr extends Translations$logs$en { @override String get uploadLogs => 'Günlükleri Yükle'; } +// Path: startup +class _Translations$startup$tr extends Translations$startup$en { + _Translations$startup$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy başlatılamadı'; + @override String get failedBody => 'Başlatma sırasında bir şeyler ters gitti. Aşağıdaki ayrıntılar neyin başarısız olduğunu gösteriyor.'; + @override String get failedBodyRepairable => 'Plezy\'nin kayıtlı ayar dosyası hasarlı ve Plezy başlamadan önce yeniden oluşturulması gerekiyor. Tekrar denemek işe yaramaz — Depolama Alanını Onar\'ı seçin.'; + @override String get phaseLabel => 'Adım'; + @override String get showDetails => 'Ayrıntıları göster'; + @override String get hideDetails => 'Ayrıntıları gizle'; + @override String get copyDetails => 'Ayrıntıları kopyala'; + @override String get detailsCopied => 'Ayrıntılar panoya kopyalandı'; + @override String get uploadDetails => 'Ayrıntıları yükle'; + @override String get repairStorage => 'Depolama Alanını Onar'; + @override String get repairTitle => 'Kayıtlı veriler onarılsın mı?'; + @override String get repairBodyCommon => 'Plezy\'nin ayar dosyası hasarlı ve okunamıyor. Onarım, her ayarı varsayılanına sıfırlar.'; + @override String get repairBodyOneCredential => 'Kayıtlı bir giriş hasarlı ve okunamıyor. Onarım yalnızca onu kaldırır; diğer ayarlarınıza dokunulmaz.'; + @override String get repairBodySignInsKept => 'Sunucularınız ve profilleriniz giriş yapılı kalmalı.'; + @override String get repairBodySignInsLost => 'Kayıtlı girişlerinizi koruyan anahtar bu dosyadan kurtarılamıyor, bu yüzden her sunucuya ve profile yeniden giriş yapmanız gerekecek. Medya sunucunuzdaki hiçbir şey etkilenmez.'; + @override String get repairBodySessionsUncertain => 'Takip hizmetleri (MAL, AniList, Simkl, Trakt) ve Seerr ayrı olarak saklanır; korunup korunmayacakları belirsizdir. Plezy tam olarak neyi koruduğunu size söyleyecek.'; + @override String get repairConfirm => 'Onar'; + @override String get repairSucceeded => 'Depolama alanı onarıldı'; + @override String get repairNeedsRestart => 'Depolama alanı onarıldı — yeniden başlatma gerekli'; + @override String get restartRequiredBody => 'Verileriniz onarıldı, ancak Plezy\'nin bunları kullanabilmesi için temiz bir başlangıç yapması gerekiyor. Plezy\'yi kapatıp yeniden açın.'; + @override String get quitPlezy => 'Plezy\'den Çık'; + @override String get repairFailed => 'Onarım başarısız oldu'; + @override String get repairKeptSignIns => 'Sunucularınız ve profilleriniz hâlâ giriş yapılı.'; + @override String get repairLostSignIns => 'Kayıtlı girişlerinizi koruyan anahtar kurtarılamadı. Her sunucuya ve profile yeniden giriş yapmanız gerekecek.'; + @override String get repairLostSessions => 'En az bir takip hizmeti veya Seerr bağlantısı kayboldu ve yeniden bağlanması gerekiyor.'; + @override String get backupTitle => 'Hasarlı dosyanın bir kopyası saklandı'; + @override String get backupWarning => 'Giriş bilgilerinizi içerir. Yüklemeyin veya paylaşmayın.'; + @override String get deleteBackup => 'Kopyayı Sil'; + @override String get backupDeleted => 'Kopya silindi.'; + @override String get previousFailureTitle => 'Plezy geçen sefer başlatılamadı'; +} + // Path: licenses class _Translations$licenses$tr extends Translations$licenses$en { _Translations$licenses$tr._(TranslationsTr root) : this._root = root, super.internal(root); @@ -1137,6 +1309,20 @@ class _Translations$explore$tr extends Translations$explore$en { @override String searchEmpty({required Object query}) => '"${query}" için sonuç bulunamadı'; @override String searchPrompt({required Object source}) => '${source} üzerinde film ve dizileri arayın.'; @override String get searchFailed => 'Arama başarısız. Bağlantınızı kontrol edip tekrar deneyin.'; + @override late final _Translations$explore$badge$tr badge = _Translations$explore$badge$tr._(_root); + @override late final _Translations$explore$stats$tr stats = _Translations$explore$stats$tr._(_root); + @override late final _Translations$explore$season$tr season = _Translations$explore$season$tr._(_root); + @override late final _Translations$explore$format$tr format = _Translations$explore$format$tr._(_root); + @override late final _Translations$explore$sourceMaterial$tr sourceMaterial = _Translations$explore$sourceMaterial$tr._(_root); + @override late final _Translations$explore$creditRole$tr creditRole = _Translations$explore$creditRole$tr._(_root); + @override late final _Translations$explore$relation$tr relation = _Translations$explore$relation$tr._(_root); + @override String broadcast({required Object day, required Object time}) => '${day} ${time} yayınlanır'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '${day} ${time} ${timezone} yayınlanır'; + @override late final _Translations$explore$detail$tr detail = _Translations$explore$detail$tr._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: '${n} sonuç', + other: '${n} sonuç', + ); } // Path: liveTv @@ -1810,9 +1996,12 @@ class _Translations$addServer$tr extends Translations$addServer$en { final TranslationsTr _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product} sunucusu ekle'; @override String get serverUrls => 'Sunucu URL\'leri'; @override String get serverUrlsHelper => 'Virgülle ayrılmış birden fazla URL\'ye izin verilir.'; @override String get findServer => 'Sunucu bul'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Yerel ${product} sunucuları aranıyor...'; + @override String localMediaBrowserServers({required Object product}) => 'Yerel ${product} sunucuları'; @override String get username => 'Kullanıcı adı'; @override String get password => 'Şifre'; @override String get signIn => 'Giriş Yap'; @@ -1824,15 +2013,39 @@ class _Translations$addServer$tr extends Translations$addServer$en { @override String get addPlexTitle => 'Plex ile Giriş Yap'; @override String get pinExpired => 'Giriş yapmadan önce PIN süresi doldu. Lütfen tekrar deneyin.'; @override String failedToRegisterAccount({required Object error}) => 'Hesap kaydı başarısız oldu: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '${product} sunucu URL\'nizi girin'; @override String get addConnectionTitle => 'Bağlantı ekle'; @override String addConnectionTitleScoped({required Object name}) => '${name} profiline ekle'; @override String get signInWithPlexCard => 'Plex ile Giriş Yap'; @override String get signInWithPlexCardSubtitle => 'Bu cihazı yetkilendirin. Paylaşılan sunucular eklenir.'; @override String get signInWithPlexCardSubtitleScoped => 'Bir Plex hesabını yetkilendirin. Ev kullanıcıları profile dönüşür.'; + @override String connectToMediaBrowserCard({required Object product}) => '${product} ile Bağlan'; + @override String get connectToMediaBrowserCardSubtitle => 'Sunucu URL\'nizi, kullanıcı adınızı ve şifrenizi girin.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '${product} sunucunuza giriş yapın. ${name} profiline bağlanır.'; @override String get borrowFromAnotherProfile => 'Başka bir profilden ödünç al'; @override String get borrowFromAnotherProfileSubtitle => 'Başka bir profilin bağlantısını yeniden kullanın. PIN korumalı profiller bir PIN gerektirir.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$tr extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get critic => 'Eleştirmenler'; + @override String get audience => 'İzleyiciler'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes eleştirmenleri'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes izleyicileri'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$tr extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$tr._(TranslationsTr root) : this._root = root, super.internal(root); @@ -1996,6 +2209,186 @@ class _Translations$explore$status$tr extends Translations$explore$status$en { @override String get upcoming => 'Gelecek'; } +// Path: explore.badge +class _Translations$explore$badge$tr extends Translations$explore$badge$en { + _Translations$explore$badge$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => 'Popülerde #${n}'; + @override String rankAiring({required Object n}) => 'Yayında #${n}'; + @override String rankRated({required Object n}) => 'Puanlarda #${n}'; + @override String rankFavorited({required Object n}) => 'Favorilerde #${n}'; + @override String rankTrending({required Object n}) => 'Trendde #${n}'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} ${season} sezonunda'; + @override String watchingNow({required Object n}) => '${n} izliyor'; + @override String get available => 'Mevcut'; + @override String get partiallyAvailable => 'Kısmen mevcut'; + @override String get availableIn4k => '4K mevcut'; + @override String get requested => 'İstendi'; + @override String get pendingApproval => 'Onay bekliyor'; + @override String get processing => 'İşleniyor'; + @override String get declined => 'Reddedildi'; + @override String get requestFailed => 'İstek başarısız oldu'; + @override String get requested4k => '4K istendi'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} sezon'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => 'Bölüm ${episode}, ${duration} içinde'; + @override String nextAiringIn({required Object duration}) => 'Sıradaki ${duration} içinde'; + @override String episodesShort({required Object n}) => '${n} blm'; + @override String minutesPerEpisode({required Object n}) => '${n} dk/blm'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$tr extends Translations$explore$stats$en { + _Translations$explore$stats$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} listede'; + @override String viewersDay({required Object n}) => '${n} bugün izledi'; + @override String viewersWeek({required Object n}) => '${n} bu hafta izledi'; + @override String viewersMonth({required Object n}) => '${n} bu ay izledi'; + @override String viewersYear({required Object n}) => '${n} bu yıl izledi'; + @override String viewersAllTime({required Object n}) => '${n} izleyici'; + @override String planning({required Object n}) => '${n} izlemeyi planlıyor'; + @override String favorited({required Object n}) => '${n} favori'; + @override String dropRate({required Object percent}) => '${percent} bıraktı'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: '${n} yorum', + other: '${n} yorum', + ); + @override String votes({required Object n}) => '${n} oy'; + @override String watching({required Object n}) => '${n} izliyor'; + @override String completed({required Object n}) => '${n} tamamladı'; + @override String onHold({required Object n}) => '${n} bekletiyor'; + @override String dropped({required Object n}) => '${n} bıraktı'; +} + +// Path: explore.season +class _Translations$explore$season$tr extends Translations$explore$season$en { + _Translations$explore$season$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get winter => 'Kış'; + @override String get spring => 'İlkbahar'; + @override String get summer => 'Yaz'; + @override String get fall => 'Sonbahar'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$tr extends Translations$explore$format$en { + _Translations$explore$format$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV Kısa'; + @override String get movie => 'Film'; + @override String get special => 'Özel'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Müzik'; + @override String get other => 'Diğer'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$tr extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get original => 'Orijinal'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Görsel roman'; + @override String get game => 'Oyun'; + @override String get webComic => 'Web çizgi romanı'; + @override String get musicRelease => 'Müzik'; + @override String get otherMedia => 'Diğer'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$tr extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get director => 'Yönetmen'; + @override String get writer => 'Senarist'; + @override String get producer => 'Yapımcı'; + @override String get creator => 'Yaratıcı'; + @override String get composer => 'Besteci'; +} + +// Path: explore.relation +class _Translations$explore$relation$tr extends Translations$explore$relation$en { + _Translations$explore$relation$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prequel'; + @override String get sequel => 'Sequel'; + @override String get sideStory => 'Yan hikâye'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Alternatif versiyon'; + @override String get summary => 'Özet'; + @override String get parentStory => 'Ana hikâye'; + @override String get adaptation => 'Uyarlama'; + @override String get other => 'İlgili'; +} + +// Path: explore.detail +class _Translations$explore$detail$tr extends Translations$explore$detail$en { + _Translations$explore$detail$tr._(TranslationsTr root) : this._root = root, super.internal(root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Orijinal başlık'; + @override String get alsoKnownAs => 'Ayrıca bilinen adlar'; + @override String get studios => 'Stüdyolar'; + @override String get country => 'Ülke'; + @override String get language => 'Dil'; + @override String get released => 'Yayınlanma'; + @override String get physicalRelease => 'Diskte'; + @override String get ended => 'Sona erdi'; + @override String addedOn({required Object date}) => '${date} eklendi'; + @override String get yourRating => 'Puanınız'; + @override String get budget => 'Bütçe'; + @override String get revenue => 'Gişe'; + @override String get contentAdvisory => 'Yaş sınırı'; + @override String get tags => 'Etiketler'; + @override String get revealSpoilerTags => 'Spoiler etiketlerini göster'; + @override String get links => 'Bağlantılar'; + @override String get watchOn => 'İzle'; + @override String get watchTrailer => 'Fragmanı izle'; + @override String openOn({required Object site}) => '${site}\'de aç'; + @override String get crew => 'Ekip'; + @override String get ratings => 'Puanlar'; + @override String get schedule => 'Yayın takvimi'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: '${n} kullanıcı önerdi', + other: '${n} kullanıcı önerdi', + ); + @override String recommendedBy({required Object who}) => '${who} tarafından önerildi'; + @override String favoritedBy({required Object who}) => '${who} tarafından favorilendi'; + @override String unairedEpisodes({required Object n}) => '${n} henüz yayınlanmadı'; + @override String recommendedByPercent({required Object percent}) => 'İzleyicilerin ${percent} tarafından önerildi'; + @override String get relatedTitles => 'İlgili yapımlar'; + @override String get background => 'Arka plan'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$tr extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$tr._(TranslationsTr root) : this._root = root, super.internal(root); @@ -2139,6 +2532,7 @@ class _Translations$services$names$tr extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2208,6 +2602,7 @@ extension on TranslationsTr { 'auth.waitingForAuth' => 'Doğrulama bekleniyor...\nTarayıcınızdan giriş yapın.', 'auth.useBrowser' => 'Tarayıcı kullan', 'auth.or' => 'veya', + 'auth.connectToMediaBrowser' => ({required Object product}) => '${product} ile Bağlan', 'auth.useQuickConnect' => 'Hızlı Bağlantıyı Kullan', 'auth.quickConnectInstructions' => 'Jellyfin\'de Hızlı Bağlantı\'yı açın ve bu kodu girin.', 'auth.quickConnectWaiting' => 'Onay bekleniyor…', @@ -2259,6 +2654,17 @@ extension on TranslationsTr { 'common.fullscreen' => 'Tam Ekran', 'common.exitFullscreen' => 'Tam Ekrandan Çık', 'common.pressBackAgainToExit' => 'Çıkmak için tekrar geri tuşuna basın', + 'common.ratingSource.critic' => 'Eleştirmenler', + 'common.ratingSource.audience' => 'İzleyiciler', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes eleştirmenleri', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes izleyicileri', 'screens.licenses' => 'Lisanslar', 'screens.switchProfile' => 'Profil Değiştir', 'screens.subtitleStyling' => 'Altyazı Biçimlendirmesi', @@ -2295,6 +2701,7 @@ extension on TranslationsTr { 'settings.darkTheme' => 'Koyu', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Kitaplık Yoğunluğu', + 'settings.displayScale' => 'Ekran ölçeği', 'settings.compact' => 'Sıkışık', 'settings.comfortable' => 'Rahat', 'settings.tvCornerSpotlightBackdrop' => 'Köşe Öne Çıkan Arka Plan', @@ -2344,6 +2751,11 @@ extension on TranslationsTr { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => 'Otomatik (Önerilen)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB bellek mevcut. ${size}MB arabellek oynatmayı etkileyebilir.', + 'settings.playbackBuffer' => 'Oynatma Tamponu', + 'settings.playbackBufferAuto' => 'Otomatik (Önerilen)', + 'settings.playbackBufferLarge' => 'Büyük', + 'settings.playbackBufferExtraLarge' => 'Ekstra Büyük', + 'settings.playbackBufferDescription' => 'Kararsız bağlantılara karşı daha fazla tamponlar. Tampon Boyutu ile de sınırlıdır.', 'settings.defaultQualityTitle' => 'Varsayılan Kalite', 'settings.musicQualityTitle' => 'Müzik Kalitesi', 'settings.subtitleStyling' => 'Altyazı Biçimlendirmesi', @@ -2563,29 +2975,118 @@ extension on TranslationsTr { 'hotkeys.actions.skipMarker' => 'Jenerik/Emeği Geçenleri Atla', 'hotkeys.actions.screenshot' => 'Ekran Görüntüsü Al', 'fileInfo.title' => 'Dosya Bilgisi', + 'fileInfo.overview' => 'Genel Bakış', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Ses', 'fileInfo.subtitles' => 'Altyazılar', + 'fileInfo.images' => 'Gömülü Görseller', + 'fileInfo.dataStreams' => 'Veri Akışları', + 'fileInfo.lyrics' => 'Şarkı Sözleri', 'fileInfo.file' => 'Dosya', + 'fileInfo.attachments' => 'Ekler', + 'fileInfo.delivery' => 'Teslimat', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => 'Sürüm ${index} / ${count}', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => 'Dosya ${index} / ${count}', + 'fileInfo.noStreams' => 'Sunucu bu dosya için hiçbir akış bildirmedi.', + 'fileInfo.copyPath' => 'Yolu Kopyala', + 'fileInfo.pathCopied' => 'Dosya yolu kopyalandı', 'fileInfo.codec' => 'Kodek', + 'fileInfo.codecTag' => 'Codec Etiketi', 'fileInfo.resolution' => 'Çözünürlük', + 'fileInfo.codedResolution' => 'Kodlanmış Çözünürlük', 'fileInfo.bitrate' => 'Bit Hızı (Bitrate)', 'fileInfo.frameRate' => 'Kare Hızı', + 'fileInfo.rotation' => 'Döndürme', + 'fileInfo.comment' => 'Yorum', + 'fileInfo.audioDescription' => 'Sesli Betimleme', + 'fileInfo.headerCompression' => 'Başlık Sıkıştırması', + 'fileInfo.sidecarFile' => 'Yan Dosya', + 'fileInfo.transportTimestamp' => 'İletim Zaman Damgası', + 'fileInfo.displayOffset' => 'Görüntü Ofseti', + 'fileInfo.previewFailureCode' => 'Önizleme Hata Kodu', + 'fileInfo.previewRetries' => 'Önizleme Denemeleri', 'fileInfo.aspectRatio' => 'En Boy Oranı', + 'fileInfo.pixelAspectRatio' => 'Piksel En Boy Oranı', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Seviye', 'fileInfo.bitDepth' => 'Bit Derinliği', + 'fileInfo.pixelFormat' => 'Piksel Biçimi', 'fileInfo.colorSpace' => 'Renk Alanı', 'fileInfo.colorRange' => 'Renk Aralığı', 'fileInfo.colorPrimaries' => 'Ana Renkler', + 'fileInfo.colorTransfer' => 'Renk Aktarımı', 'fileInfo.chromaSubsampling' => 'Renk Alt Örneklemesi', + 'fileInfo.chromaLocation' => 'Chroma Konumu', + 'fileInfo.scanType' => 'Tarama Türü', + 'fileInfo.interlaced' => 'Geçmeli', + 'fileInfo.anamorphic' => 'Anamorfik', + 'fileInfo.referenceFrames' => 'Referans Kareler', + 'fileInfo.dynamicRange' => 'Dinamik Aralık', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision Seviyesi', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision Sürümü', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision Katmanları', + 'fileInfo.baseLayerCompatibility' => 'Temel Katman Uyumluluğu', + 'fileInfo.avcBitstream' => 'AVC Bit Akışı', + 'fileInfo.nalLengthSize' => 'NAL Uzunluk Boyutu', + 'fileInfo.scalingMatrix' => 'Özel Ölçekleme Matrisi', + 'fileInfo.streamIdentifier' => 'Akış Tanımlayıcısı', + 'fileInfo.streamIndex' => 'Akış Dizini', + 'fileInfo.streamId' => 'Akış Kimliği', + 'fileInfo.language' => 'Dil', + 'fileInfo.languageCode' => 'Dil Kodu', + 'fileInfo.streamTitle' => 'Parça Başlığı', 'fileInfo.channels' => 'Kanallar', + 'fileInfo.sampleRate' => 'Örnekleme Hızı', + 'fileInfo.spatialAudio' => 'Uzamsal Ses', + 'fileInfo.textBased' => 'Metin Tabanlı', + 'fileInfo.subtitleFormat' => 'Yan Dosya Biçimi', + 'fileInfo.provider' => 'Sağlayıcı', + 'fileInfo.matchScore' => 'Eşleşme Puanı', + 'fileInfo.externalDelivery' => 'Ayrı Olarak Sunulabilir', + 'fileInfo.sidecarPath' => 'Yan Dosya Yolu', + 'fileInfo.sourceStream' => 'Kopyalandığı Yer', + 'fileInfo.temporary' => 'Geçici', + 'fileInfo.timeBase' => 'Zaman Tabanı', 'fileInfo.overallBitrate' => 'Genel Bit Hızı', 'fileInfo.path' => 'Yol', + 'fileInfo.fileName' => 'Dosya Adı', 'fileInfo.size' => 'Boyut', + 'fileInfo.totalSize' => 'Toplam Boyut', 'fileInfo.container' => 'Kapsayıcı', 'fileInfo.duration' => 'Süre', + 'fileInfo.previewThumbnails' => 'Önizleme Küçük Resimleri', + 'fileInfo.previewIndex' => 'Önizleme Dizini', + 'fileInfo.packetLength' => 'Paket Uzunluğu', + 'fileInfo.filePresent' => 'Dosya Mevcut', + 'fileInfo.fileReadable' => 'Sunucu Tarafından Okunabilir', + 'fileInfo.streamPath' => 'Akış Yolu', 'fileInfo.optimizedForStreaming' => 'Akış İçin Optimize Edilmiş', 'fileInfo.has64bitOffsets' => '64-bit Ofsetler', + 'fileInfo.protocol' => 'Protokol', + 'fileInfo.mediaType' => 'Medya Türü', + 'fileInfo.sourceKind' => 'Kaynak Türü', + 'fileInfo.optimizedVersion' => 'Optimize Edilmiş Sürüm', + 'fileInfo.optimizationTarget' => 'Optimizasyon Hedefi', + 'fileInfo.deletedAt' => 'Silindi', + 'fileInfo.remoteSource' => 'Uzak Kaynak', + 'fileInfo.infiniteStream' => 'Sonsuz Akış', + 'fileInfo.directPlay' => 'Doğrudan Oynatma', + 'fileInfo.directStream' => 'Doğrudan Akış', + 'fileInfo.transcoding' => 'Kod Dönüştürme', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Sürüm Kimliği', + 'fileInfo.fileId' => 'Dosya Kimliği', + 'fileInfo.defaultAudioTrack' => 'Varsayılan Ses Parçası', + 'fileInfo.defaultSubtitleTrack' => 'Varsayılan Altyazı Parçası', + 'fileInfo.subtitlesOff' => 'Kapalı', + 'fileInfo.flagDefault' => 'Varsayılan', + 'fileInfo.flagForced' => 'Zorunlu', + 'fileInfo.flagSelected' => 'Seçili', + 'fileInfo.flagExternal' => 'Harici', + 'fileInfo.flagHearingImpaired' => 'İşitme Engelliler İçin', + 'fileInfo.flagDub' => 'Dublaj', + 'fileInfo.flagOriginal' => 'Orijinal', 'mediaMenu.markAsWatched' => 'İzlendi Olarak İşaretle', 'mediaMenu.markAsUnwatched' => 'İzlenmedi Olarak İşaretle', 'mediaMenu.removeFromContinueWatching' => 'İzlemeye Devam Et\'ten Kaldır', @@ -2594,7 +3095,28 @@ extension on TranslationsTr { 'mediaMenu.shufflePlay' => 'Karışık Oynat', 'mediaMenu.shuffleNotAvailableOffline' => 'Karışık oynatma çevrimdışıyken kullanılamaz', 'mediaMenu.fileInfo' => 'Dosya Bilgisi', + 'mediaMenu.deleteEpisodeFromServer' => 'Bölümü sunucudan sil', + 'mediaMenu.deleteSeasonFromServer' => 'Sezonu sunucudan sil', + 'mediaMenu.deleteShowFromServer' => 'Diziyi sunucudan sil', + 'mediaMenu.deleteMovieFromServer' => 'Filmi sunucudan sil', + 'mediaMenu.deleteEpisodeTitle' => 'Bu bölüm silinsin mi?', + 'mediaMenu.deleteSeasonTitle' => 'Bu sezon silinsin mi?', + 'mediaMenu.deleteShowTitle' => 'Bu dizi silinsin mi?', + 'mediaMenu.deleteMovieTitle' => 'Bu film silinsin mi?', + 'mediaMenu.deleteEpisodeConfirm' => 'Bölümü Sil', + 'mediaMenu.deleteSeasonConfirm' => 'Sezonu Sil', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Diziyi Sil', + 'mediaMenu.deleteMovieConfirm' => 'Filmi Sil', + 'mediaMenu.deleteAnyway' => 'Yine de Sil', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '${title} sunucunuzdan kalıcı olarak silinsin mi?', 'mediaMenu.deleteMultipleWarning' => 'Bu işlem tüm bölümleri ve dosyalarını içerir.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, one: 'Bu, içindeki ${n} bölümü ve dosyasını siler.', other: 'Bu, içindeki ${n} bölümü ve dosyalarını siler.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, one: 'Bu öge ${n} dosya olarak saklanıyor ve silinecek.', other: 'Bu öge ${n} dosyaya bölünmüş olarak saklanıyor ve hepsi silinecek.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, one: '${n} başka bölüm aynı dosyada saklanıyor ve o da silinecek:', other: '${n} başka bölüm aynı dosyada saklanıyor ve onlar da silinecek:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy bunun hangi dosyaları sileceğini kontrol edemedi, bu yüzden yukarıda adı geçen ögeden daha fazlasını silebilir. İptal edip tekrar deneyin veya yine de silin.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Sunucunuz bu öge için dosya ayrıntıları sağlamadı, bu yüzden Plezy bunun hangi dosyaları sileceğini kontrol edemiyor. Yukarıda adı geçen ögeden daha fazlasını silebilir.', 'mediaMenu.mediaDeletedSuccessfully' => 'Medya ögesi başarıyla silindi', 'mediaMenu.mediaFailedToDelete' => 'Medya ögesi silinemedi', 'mediaMenu.rate' => 'Oyla', @@ -2660,6 +3182,9 @@ extension on TranslationsTr { 'videoControls.playNext' => 'Sonrakini Oynat', 'videoControls.playButton' => 'Oynat', 'videoControls.pauseButton' => 'Duraklat', + 'videoControls.playbackPaused' => 'Duraklatıldı', + 'videoControls.playbackResumed' => 'Oynatılıyor', + 'videoControls.loadingVideo' => 'Video yükleniyor', 'videoControls.showPlaybackControls' => 'Oynatma kontrollerini göster', 'videoControls.hidePlaybackControls' => 'Oynatma kontrollerini gizle', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} saniye geri sar', @@ -2711,8 +3236,6 @@ extension on TranslationsTr { 'videoControls.searchSubtitles' => 'Altyazı Ara', 'videoControls.language' => 'Dil', 'videoControls.noSubtitlesFound' => 'Altyazı bulunamadı', - _ => null, - } ?? switch (path) { 'videoControls.subtitleDownloaded' => 'Altyazı indirildi', 'videoControls.subtitleDownloadedNotApplied' => 'Altyazı indirildi ancak seçilemedi', 'videoControls.subtitleDownloadFailed' => 'Altyazı indirilemedi', @@ -2764,6 +3287,8 @@ extension on TranslationsTr { 'messages.switchingToCompatiblePlayer' => 'Uyumlu oynatıcıya geçiliyor...', 'messages.serverLimitTitle' => 'Oynatma başarısız oldu', 'messages.serverLimitBody' => 'Sunucu hatası (HTTP 500). Muhtemelen bir bant genişliği/kod dönüştürme sınırı bu oturumu reddetti. Sunucu sahibinden bunu ayarlamasını isteyin.', + 'messages.mediaUnreadableTitle' => 'Dosya kullanılamıyor', + 'messages.mediaUnreadableBody' => 'Sunucu bu ögeyi buldu ancak dosyasını okuyamadı (HTTP 404). Dosya büyük olasılıkla taşındı, silindi veya depolama alanı çevrimdışı. Sunucu sahibinden dosyayı kontrol edip kitaplığı yeniden taramasını isteyin.', 'messages.logsUploaded' => 'Günlükler yüklendi', 'messages.logsUploadFailed' => 'Günlükler yüklenemedi', 'messages.logId' => 'Günlük Kimliği (ID)', @@ -2872,6 +3397,8 @@ extension on TranslationsTr { 'connections.sessionExpiredOne' => ({required Object name}) => '${name} için oturum süresi doldu', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} sunucu için oturum süresi doldu', 'connections.signInAgain' => 'Tekrar giriş yap', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '${product} bağlantısını düzenle', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '${serverName} için URL ekleyin veya kaldırın. Plezy, erişilebilir olan en düşük gecikmeli URL\'yi kullanacak.', 'discover.title' => 'Keşfet', 'discover.noContentAvailable' => 'İçerik bulunmuyor', 'discover.addMediaToLibraries' => 'Kitaplıklarınıza biraz medya ekleyin', @@ -3005,6 +3532,36 @@ extension on TranslationsTr { 'logs.clearLogs' => 'Günlükleri Temizle', 'logs.copyLogs' => 'Günlükleri Kopyala', 'logs.uploadLogs' => 'Günlükleri Yükle', + 'startup.failedTitle' => 'Plezy başlatılamadı', + 'startup.failedBody' => 'Başlatma sırasında bir şeyler ters gitti. Aşağıdaki ayrıntılar neyin başarısız olduğunu gösteriyor.', + 'startup.failedBodyRepairable' => 'Plezy\'nin kayıtlı ayar dosyası hasarlı ve Plezy başlamadan önce yeniden oluşturulması gerekiyor. Tekrar denemek işe yaramaz — Depolama Alanını Onar\'ı seçin.', + 'startup.phaseLabel' => 'Adım', + 'startup.showDetails' => 'Ayrıntıları göster', + 'startup.hideDetails' => 'Ayrıntıları gizle', + 'startup.copyDetails' => 'Ayrıntıları kopyala', + 'startup.detailsCopied' => 'Ayrıntılar panoya kopyalandı', + 'startup.uploadDetails' => 'Ayrıntıları yükle', + 'startup.repairStorage' => 'Depolama Alanını Onar', + 'startup.repairTitle' => 'Kayıtlı veriler onarılsın mı?', + 'startup.repairBodyCommon' => 'Plezy\'nin ayar dosyası hasarlı ve okunamıyor. Onarım, her ayarı varsayılanına sıfırlar.', + 'startup.repairBodyOneCredential' => 'Kayıtlı bir giriş hasarlı ve okunamıyor. Onarım yalnızca onu kaldırır; diğer ayarlarınıza dokunulmaz.', + 'startup.repairBodySignInsKept' => 'Sunucularınız ve profilleriniz giriş yapılı kalmalı.', + 'startup.repairBodySignInsLost' => 'Kayıtlı girişlerinizi koruyan anahtar bu dosyadan kurtarılamıyor, bu yüzden her sunucuya ve profile yeniden giriş yapmanız gerekecek. Medya sunucunuzdaki hiçbir şey etkilenmez.', + 'startup.repairBodySessionsUncertain' => 'Takip hizmetleri (MAL, AniList, Simkl, Trakt) ve Seerr ayrı olarak saklanır; korunup korunmayacakları belirsizdir. Plezy tam olarak neyi koruduğunu size söyleyecek.', + 'startup.repairConfirm' => 'Onar', + 'startup.repairSucceeded' => 'Depolama alanı onarıldı', + 'startup.repairNeedsRestart' => 'Depolama alanı onarıldı — yeniden başlatma gerekli', + 'startup.restartRequiredBody' => 'Verileriniz onarıldı, ancak Plezy\'nin bunları kullanabilmesi için temiz bir başlangıç yapması gerekiyor. Plezy\'yi kapatıp yeniden açın.', + 'startup.quitPlezy' => 'Plezy\'den Çık', + 'startup.repairFailed' => 'Onarım başarısız oldu', + 'startup.repairKeptSignIns' => 'Sunucularınız ve profilleriniz hâlâ giriş yapılı.', + 'startup.repairLostSignIns' => 'Kayıtlı girişlerinizi koruyan anahtar kurtarılamadı. Her sunucuya ve profile yeniden giriş yapmanız gerekecek.', + 'startup.repairLostSessions' => 'En az bir takip hizmeti veya Seerr bağlantısı kayboldu ve yeniden bağlanması gerekiyor.', + 'startup.backupTitle' => 'Hasarlı dosyanın bir kopyası saklandı', + 'startup.backupWarning' => 'Giriş bilgilerinizi içerir. Yüklemeyin veya paylaşmayın.', + 'startup.deleteBackup' => 'Kopyayı Sil', + 'startup.backupDeleted' => 'Kopya silindi.', + 'startup.previousFailureTitle' => 'Plezy geçen sefer başlatılamadı', 'licenses.relatedPackages' => 'İlgili Paketler', 'licenses.license' => 'Lisans', 'licenses.licenseNumber' => ({required Object number}) => 'Lisans ${number}', @@ -3048,6 +3605,113 @@ extension on TranslationsTr { 'explore.searchEmpty' => ({required Object query}) => '"${query}" için sonuç bulunamadı', 'explore.searchPrompt' => ({required Object source}) => '${source} üzerinde film ve dizileri arayın.', 'explore.searchFailed' => 'Arama başarısız. Bağlantınızı kontrol edip tekrar deneyin.', + 'explore.badge.rankPopular' => ({required Object n}) => 'Popülerde #${n}', + 'explore.badge.rankAiring' => ({required Object n}) => 'Yayında #${n}', + 'explore.badge.rankRated' => ({required Object n}) => 'Puanlarda #${n}', + 'explore.badge.rankFavorited' => ({required Object n}) => 'Favorilerde #${n}', + 'explore.badge.rankTrending' => ({required Object n}) => 'Trendde #${n}', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} ${season} sezonunda', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} izliyor', + 'explore.badge.available' => 'Mevcut', + 'explore.badge.partiallyAvailable' => 'Kısmen mevcut', + 'explore.badge.availableIn4k' => '4K mevcut', + 'explore.badge.requested' => 'İstendi', + 'explore.badge.pendingApproval' => 'Onay bekliyor', + 'explore.badge.processing' => 'İşleniyor', + 'explore.badge.declined' => 'Reddedildi', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'İstek başarısız oldu', + 'explore.badge.requested4k' => '4K istendi', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} sezon', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => 'Bölüm ${episode}, ${duration} içinde', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Sıradaki ${duration} içinde', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} blm', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} dk/blm', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} listede', + 'explore.stats.viewersDay' => ({required Object n}) => '${n} bugün izledi', + 'explore.stats.viewersWeek' => ({required Object n}) => '${n} bu hafta izledi', + 'explore.stats.viewersMonth' => ({required Object n}) => '${n} bu ay izledi', + 'explore.stats.viewersYear' => ({required Object n}) => '${n} bu yıl izledi', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} izleyici', + 'explore.stats.planning' => ({required Object n}) => '${n} izlemeyi planlıyor', + 'explore.stats.favorited' => ({required Object n}) => '${n} favori', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} bıraktı', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, one: '${n} yorum', other: '${n} yorum', ), + 'explore.stats.votes' => ({required Object n}) => '${n} oy', + 'explore.stats.watching' => ({required Object n}) => '${n} izliyor', + 'explore.stats.completed' => ({required Object n}) => '${n} tamamladı', + 'explore.stats.onHold' => ({required Object n}) => '${n} bekletiyor', + 'explore.stats.dropped' => ({required Object n}) => '${n} bıraktı', + 'explore.season.winter' => 'Kış', + 'explore.season.spring' => 'İlkbahar', + 'explore.season.summer' => 'Yaz', + 'explore.season.fall' => 'Sonbahar', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV Kısa', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Özel', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Müzik', + 'explore.format.other' => 'Diğer', + 'explore.sourceMaterial.original' => 'Orijinal', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Görsel roman', + 'explore.sourceMaterial.game' => 'Oyun', + 'explore.sourceMaterial.webComic' => 'Web çizgi romanı', + 'explore.sourceMaterial.musicRelease' => 'Müzik', + 'explore.sourceMaterial.otherMedia' => 'Diğer', + 'explore.creditRole.director' => 'Yönetmen', + 'explore.creditRole.writer' => 'Senarist', + 'explore.creditRole.producer' => 'Yapımcı', + 'explore.creditRole.creator' => 'Yaratıcı', + 'explore.creditRole.composer' => 'Besteci', + 'explore.relation.prequel' => 'Prequel', + 'explore.relation.sequel' => 'Sequel', + 'explore.relation.sideStory' => 'Yan hikâye', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Alternatif versiyon', + 'explore.relation.summary' => 'Özet', + 'explore.relation.parentStory' => 'Ana hikâye', + 'explore.relation.adaptation' => 'Uyarlama', + 'explore.relation.other' => 'İlgili', + 'explore.broadcast' => ({required Object day, required Object time}) => '${day} ${time} yayınlanır', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '${day} ${time} ${timezone} yayınlanır', + 'explore.detail.originalTitle' => 'Orijinal başlık', + 'explore.detail.alsoKnownAs' => 'Ayrıca bilinen adlar', + 'explore.detail.studios' => 'Stüdyolar', + 'explore.detail.country' => 'Ülke', + 'explore.detail.language' => 'Dil', + 'explore.detail.released' => 'Yayınlanma', + 'explore.detail.physicalRelease' => 'Diskte', + 'explore.detail.ended' => 'Sona erdi', + 'explore.detail.addedOn' => ({required Object date}) => '${date} eklendi', + 'explore.detail.yourRating' => 'Puanınız', + 'explore.detail.budget' => 'Bütçe', + 'explore.detail.revenue' => 'Gişe', + 'explore.detail.contentAdvisory' => 'Yaş sınırı', + 'explore.detail.tags' => 'Etiketler', + 'explore.detail.revealSpoilerTags' => 'Spoiler etiketlerini göster', + 'explore.detail.links' => 'Bağlantılar', + 'explore.detail.watchOn' => 'İzle', + 'explore.detail.watchTrailer' => 'Fragmanı izle', + 'explore.detail.openOn' => ({required Object site}) => '${site}\'de aç', + 'explore.detail.crew' => 'Ekip', + 'explore.detail.ratings' => 'Puanlar', + 'explore.detail.schedule' => 'Yayın takvimi', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, one: '${n} kullanıcı önerdi', other: '${n} kullanıcı önerdi', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '${who} tarafından önerildi', + 'explore.detail.favoritedBy' => ({required Object who}) => '${who} tarafından favorilendi', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} henüz yayınlanmadı', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'İzleyicilerin ${percent} tarafından önerildi', + 'explore.detail.relatedTitles' => 'İlgili yapımlar', + 'explore.detail.background' => 'Arka plan', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, one: '${n} sonuç', other: '${n} sonuç', ), 'liveTv.title' => 'Canlı TV', 'liveTv.guide' => 'Rehber', 'liveTv.noChannels' => 'Kullanılabilir kanal yok', @@ -3225,8 +3889,6 @@ extension on TranslationsTr { 'watchTogether.codeMustBe5Chars' => 'Oturum kodu 5 karakter olmalıdır', 'watchTogether.joinInstructions' => 'Katılmak için kurucunun oturum kodunu girin.', 'watchTogether.failedToCreate' => 'Oturum oluşturulamadı', - _ => null, - } ?? switch (path) { 'watchTogether.failedToJoin' => 'Oturuma katılınamadı', 'watchTogether.sessionCodeCopied' => 'Oturum kodu panoya kopyalandı', 'watchTogether.relayUnreachable' => 'Aktarıcı sunucusuna ulaşılamıyor. İSS engellemesi Birlikte İzle\'yi önleyebilir.', @@ -3471,6 +4133,8 @@ extension on TranslationsTr { 'performanceOverlay.dvRpus' => 'DV RPU\'ları', 'performanceOverlay.dvRpuAverage' => 'DV RPU Ort.', 'performanceOverlay.dvSampleAverage' => 'DV Örnek Ort.', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Maks Luma', 'performanceOverlay.minLuma' => 'Min Luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3640,6 +4304,7 @@ extension on TranslationsTr { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Plezy\'yi ${service} üzerinde etkinleştirin', 'services.deviceCode.body' => ({required Object url}) => '${url} adresini ziyaret edin ve bu kodu girin:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Etkinleştirmek için ${service} servisini açın', @@ -3663,9 +4328,12 @@ extension on TranslationsTr { 'services.libraryFilter.modeHintWhitelist' => 'Yalnızca aşağıda işaretlenen kitaplıkları eşitle.', 'services.libraryFilter.libraries' => 'Kitaplıklar', 'services.libraryFilter.noLibraries' => 'Kitaplık bulunmuyor', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product} sunucusu ekle', 'addServer.serverUrls' => 'Sunucu URL\'leri', 'addServer.serverUrlsHelper' => 'Virgülle ayrılmış birden fazla URL\'ye izin verilir.', 'addServer.findServer' => 'Sunucu bul', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Yerel ${product} sunucuları aranıyor...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Yerel ${product} sunucuları', 'addServer.username' => 'Kullanıcı adı', 'addServer.password' => 'Şifre', 'addServer.signIn' => 'Giriş Yap', @@ -3677,11 +4345,15 @@ extension on TranslationsTr { 'addServer.addPlexTitle' => 'Plex ile Giriş Yap', 'addServer.pinExpired' => 'Giriş yapmadan önce PIN süresi doldu. Lütfen tekrar deneyin.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Hesap kaydı başarısız oldu: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '${product} sunucu URL\'nizi girin', 'addServer.addConnectionTitle' => 'Bağlantı ekle', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} profiline ekle', 'addServer.signInWithPlexCard' => 'Plex ile Giriş Yap', 'addServer.signInWithPlexCardSubtitle' => 'Bu cihazı yetkilendirin. Paylaşılan sunucular eklenir.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Bir Plex hesabını yetkilendirin. Ev kullanıcıları profile dönüşür.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '${product} ile Bağlan', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Sunucu URL\'nizi, kullanıcı adınızı ve şifrenizi girin.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '${product} sunucunuza giriş yapın. ${name} profiline bağlanır.', 'addServer.borrowFromAnotherProfile' => 'Başka bir profilden ödünç al', 'addServer.borrowFromAnotherProfileSubtitle' => 'Başka bir profilin bağlantısını yeniden kullanın. PIN korumalı profiller bir PIN gerektirir.', _ => null, diff --git a/lib/i18n/strings_uz.g.dart b/lib/i18n/strings_uz.g.dart index 760a1041..ede88ad6 100644 --- a/lib/i18n/strings_uz.g.dart +++ b/lib/i18n/strings_uz.g.dart @@ -67,6 +67,7 @@ class TranslationsUz extends Translations with BaseTranslations 'Tasdiqlanish kutilmoqda...\nBrauzeringizdan kiring.'; @override String get useBrowser => 'Brauzerdan foydalanish'; @override String get or => 'yoki'; + @override String connectToMediaBrowser({required Object product}) => '${product}ga ulanish'; @override String get useQuickConnect => 'Tezkor ulanishdan foydalanish'; @override String get quickConnectInstructions => 'Jellyfin-da Tezkor ulanishni oching va ushbu kodni kiriting.'; @override String get quickConnectWaiting => 'Tasdiq kutilmoqda…'; @@ -175,6 +177,7 @@ class _Translations$common$uz extends Translations$common$en { @override String get fullscreen => 'Toʻliq ekran'; @override String get exitFullscreen => 'Toʻliq ekrandan chiqish'; @override String get pressBackAgainToExit => 'Chiqish uchun orqaga tugmasini yana bir bor bosing'; + @override late final _Translations$common$ratingSource$uz ratingSource = _Translations$common$ratingSource$uz._(_root); } // Path: screens @@ -238,6 +241,7 @@ class _Translations$settings$uz extends Translations$settings$en { @override String get darkTheme => 'Toʻq'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => 'Kutubxona zichligi'; + @override String get displayScale => 'Ekran miqyosi'; @override String get compact => 'Ixcham'; @override String get comfortable => 'Qulay'; @override String get tvCornerSpotlightBackdrop => 'Burchak yoritish foni'; @@ -287,6 +291,11 @@ class _Translations$settings$uz extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => 'Avtomatik (Tavsiya etilgan)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} MB Xotira mavjud. ${size} MB bufer ijroga taʼsir qilishi mumkin.'; + @override String get playbackBuffer => 'Ijro buferi'; + @override String get playbackBufferAuto => 'Avto (tavsiya etiladi)'; + @override String get playbackBufferLarge => 'Katta'; + @override String get playbackBufferExtraLarge => 'Juda katta'; + @override String get playbackBufferDescription => 'Beqaror ulanishlarga qarshi koʻproq buferlaydi. Bufer hajmi bilan ham cheklanadi.'; @override String get defaultQualityTitle => 'Standart sifat'; @override String get musicQualityTitle => 'Musiqa sifati'; @override String get subtitleStyling => 'Subtitr sozlamalari'; @@ -509,29 +518,118 @@ class _Translations$fileInfo$uz extends Translations$fileInfo$en { // Translations @override String get title => 'Fayl haqida maʼlumot'; + @override String get overview => 'Tavsif'; @override String get video => 'Video'; @override String get audio => 'Audio'; @override String get subtitles => 'Subtitrlar'; + @override String get images => 'Ichiga joylangan rasmlar'; + @override String get dataStreams => 'Maʼlumot oqimlari'; + @override String get lyrics => 'Qoʻshiq matni'; @override String get file => 'Fayl'; + @override String get attachments => 'Biriktirilgan fayllar'; + @override String get delivery => 'Yetkazib berish'; + @override String versionCounter({required Object index, required Object count}) => '${index}-versiya (${count} tadan)'; + @override String fileCounter({required Object index, required Object count}) => '${index}-fayl (${count} tadan)'; + @override String get noStreams => 'Server ushbu fayl uchun oqimlar mavjud emasligini bildirdi.'; + @override String get copyPath => 'Yoʻlni nusxalash'; + @override String get pathCopied => 'Fayl yoʻli nusxalandi'; @override String get codec => 'Kodek'; + @override String get codecTag => 'Kodek yorligʻi'; @override String get resolution => 'Oʻlchamlari (Resolution)'; + @override String get codedResolution => 'Kodlangan oʻlcham'; @override String get bitrate => 'Bitreyt (Bitrate)'; @override String get frameRate => 'Kadrlar chastotasi'; + @override String get rotation => 'Burilish'; + @override String get comment => 'Izoh'; + @override String get audioDescription => 'Audio tavsif'; + @override String get headerCompression => 'Sarlavha siqish'; + @override String get sidecarFile => 'Yordamchi fayl'; + @override String get transportTimestamp => 'Transport vaqt belgisi'; + @override String get displayOffset => 'Koʻrsatish siljishi'; + @override String get previewFailureCode => 'Oldindan koʻrish xatosi kodi'; + @override String get previewRetries => 'Oldindan koʻrish urinishlari'; @override String get aspectRatio => 'Tomonlar nisbati'; + @override String get pixelAspectRatio => 'Piksel tomonlar nisbati'; @override String get profile => 'Profil'; + @override String get level => 'Daraja'; @override String get bitDepth => 'Bit chuqurligi'; + @override String get pixelFormat => 'Piksel formati'; @override String get colorSpace => 'Rang makoni'; @override String get colorRange => 'Rang diapazoni'; @override String get colorPrimaries => 'Asosiy ranglar'; + @override String get colorTransfer => 'Rang uzatish'; @override String get chromaSubsampling => 'Rangli subdiskretlash'; + @override String get chromaLocation => 'Chroma joylashuvi'; + @override String get scanType => 'Skanerlash turi'; + @override String get interlaced => 'Interleys'; + @override String get anamorphic => 'Anamorfik'; + @override String get referenceFrames => 'Tayanch kadrlar'; + @override String get dynamicRange => 'Dinamik diapazon'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision darajasi'; + @override String get dolbyVisionVersion => 'Dolby Vision versiyasi'; + @override String get dolbyVisionLayers => 'Dolby Vision qatlamlari'; + @override String get baseLayerCompatibility => 'Asosiy qatlam mosligi'; + @override String get avcBitstream => 'AVC bit oqimi'; + @override String get nalLengthSize => 'NAL uzunlik oʻlchami'; + @override String get scalingMatrix => 'Maxsus masshtablash matritsasi'; + @override String get streamIdentifier => 'Oqim identifikatori'; + @override String get streamIndex => 'Oqim indeksi'; + @override String get streamId => 'Oqim ID-si'; + @override String get language => 'Til'; + @override String get languageCode => 'Til kodi'; + @override String get streamTitle => 'Trek nomi'; @override String get channels => 'Kanallar'; + @override String get sampleRate => 'Namuna tezligi'; + @override String get spatialAudio => 'Fazoviy audio'; + @override String get textBased => 'Matnga asoslangan'; + @override String get subtitleFormat => 'Yordamchi format'; + @override String get provider => 'Provayder'; + @override String get matchScore => 'Moslik darajasi'; + @override String get externalDelivery => 'Alohida uzatilishi mumkin'; + @override String get sidecarPath => 'Yordamchi fayl yoʻli'; + @override String get sourceStream => 'Nusxa olingan manba'; + @override String get temporary => 'Vaqtinchalik'; + @override String get timeBase => 'Vaqt bazasi'; @override String get overallBitrate => 'Umumiy bitreyt'; @override String get path => 'Yoʻl'; + @override String get fileName => 'Fayl nomi'; @override String get size => 'Hajmi'; + @override String get totalSize => 'Umumiy hajm'; @override String get container => 'Konteyner'; @override String get duration => 'Davomiyligi'; + @override String get previewThumbnails => 'Oldindan koʻrish eskizlari'; + @override String get previewIndex => 'Oldindan koʻrish indeksi'; + @override String get packetLength => 'Paket uzunligi'; + @override String get filePresent => 'Fayl mavjud'; + @override String get fileReadable => 'Server tomonidan oʻqiladigan'; + @override String get streamPath => 'Oqim yoʻli'; @override String get optimizedForStreaming => 'Oqimli uzatish uchun optimallashtirilgan'; @override String get has64bitOffsets => '64-bitli siljishlar'; + @override String get protocol => 'Protokol'; + @override String get mediaType => 'Media turi'; + @override String get sourceKind => 'Manba turi'; + @override String get optimizedVersion => 'Optimallashtirilgan versiya'; + @override String get optimizationTarget => 'Optimallashtirish maqsadi'; + @override String get deletedAt => 'Oʻchirilgan'; + @override String get remoteSource => 'Masofaviy manba'; + @override String get infiniteStream => 'Cheksiz oqim'; + @override String get directPlay => 'Toʻgʻridan-toʻgʻri ijro'; + @override String get directStream => 'Toʻgʻridan-toʻgʻri oqim'; + @override String get transcoding => 'Qayta kodlash'; + @override String get etag => 'ETag'; + @override String get versionId => 'Versiya ID-si'; + @override String get fileId => 'Fayl ID-si'; + @override String get defaultAudioTrack => 'Standart audio trek'; + @override String get defaultSubtitleTrack => 'Standart subtitr treki'; + @override String get subtitlesOff => 'Oʻchirilgan'; + @override String get flagDefault => 'Standart'; + @override String get flagForced => 'Majburiy'; + @override String get flagSelected => 'Tanlangan'; + @override String get flagExternal => 'Tashqi'; + @override String get flagHearingImpaired => 'Eshitishida nuqsoni borlar uchun'; + @override String get flagDub => 'Dublyaj'; + @override String get flagOriginal => 'Asl'; } // Path: mediaMenu @@ -549,7 +647,35 @@ class _Translations$mediaMenu$uz extends Translations$mediaMenu$en { @override String get shufflePlay => 'Aralashtirib ijro etish'; @override String get shuffleNotAvailableOffline => 'Aralashtirib ijro etish oflayn rejimda mavjud emas'; @override String get fileInfo => 'Fayl haqida maʼlumot'; + @override String get deleteEpisodeFromServer => 'Qismni serverdan oʻchirish'; + @override String get deleteSeasonFromServer => 'Mavsumni serverdan oʻchirish'; + @override String get deleteShowFromServer => 'Shouni serverdan oʻchirish'; + @override String get deleteMovieFromServer => 'Filmni serverdan oʻchirish'; + @override String get deleteEpisodeTitle => 'Ushbu qism oʻchirilsinmi?'; + @override String get deleteSeasonTitle => 'Ushbu mavsum oʻchirilsinmi?'; + @override String get deleteShowTitle => 'Ushbu shou oʻchirilsinmi?'; + @override String get deleteMovieTitle => 'Ushbu film oʻchirilsinmi?'; + @override String get deleteEpisodeConfirm => 'Qismni oʻchirish'; + @override String get deleteSeasonConfirm => 'Mavsumni oʻchirish'; + @override String get deleteShowConfirm => 'Shouni oʻchirish'; + @override String get deleteMovieConfirm => 'Filmni oʻchirish'; + @override String get deleteAnyway => 'Baribir oʻchirish'; + @override String confirmDeleteTarget({required Object title}) => '${title} serveringizdan butunlay oʻchirilsinmi?'; @override String get deleteMultipleWarning => 'Bu barcha qismlar va fayllarga taʼsir qiladi.'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, + one: 'Bu undagi barcha ${n} qismni va uning faylini oʻchiradi.', + other: 'Bu undagi barcha ${n} qismni va ularning fayllarini oʻchiradi.', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, + one: 'Bu element ${n} fayl shaklida saqlanadi va u oʻchiriladi.', + other: 'Bu element ${n} faylda saqlanadi va ularning barchasi oʻchiriladi.', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, + one: 'Xuddi shu faylda yana ${n} qism saqlanadi va u ham oʻchiriladi:', + other: 'Xuddi shu faylda yana ${n} qism saqlanadi va ular ham oʻchiriladi:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy qaysi fayllar olib tashlanishini tekshira olmadi, shuning uchun u yuqorida koʻrsatilgan elementdan koʻproq narsani oʻchirishi mumkin. Bekor qilib qaytadan urining yoki baribir oʻchiring.'; + @override String get deleteScopeUnverifiedNoFileInfo => 'Serveringiz ushbu element uchun fayl tafsilotlarini taqdim etmadi, shuning uchun Plezy qaysi fayllar olib tashlanishini tekshira olmaydi. U yuqorida koʻrsatilgan elementdan koʻproq narsani oʻchirishi mumkin.'; @override String get mediaDeletedSuccessfully => 'Media elementi muvaffaqiyatli oʻchirildi'; @override String get mediaFailedToDelete => 'Media elementini oʻchirib boʻlmadi'; @override String get rate => 'Baho berish'; @@ -660,6 +786,9 @@ class _Translations$videoControls$uz extends Translations$videoControls$en { @override String get playNext => 'Keyingisini ijro etish'; @override String get playButton => 'Ijro etish'; @override String get pauseButton => 'Pauza'; + @override String get playbackPaused => 'Pauza'; + @override String get playbackResumed => 'Ijro etilmoqda'; + @override String get loadingVideo => 'Video yuklanmoqda'; @override String get showPlaybackControls => 'Boshqaruv tugmalarini koʻrsatish'; @override String get hidePlaybackControls => 'Boshqaruv tugmalarini yashirish'; @override String seekBackwardButton({required Object seconds}) => '${seconds} soniya orqaga oʻtkazish'; @@ -768,6 +897,8 @@ class _Translations$messages$uz extends Translations$messages$en { @override String get switchingToCompatiblePlayer => 'Mos keluvchi pleyerga oʻtilmoqda...'; @override String get serverLimitTitle => 'Ijro etishda xatolik'; @override String get serverLimitBody => 'Server xatoligi (HTTP 500). Cheklov ushbu seansni rad etdi.'; + @override String get mediaUnreadableTitle => 'Fayl mavjud emas'; + @override String get mediaUnreadableBody => 'Server bu elementni topdi, lekin uning faylini oʻqiy olmadi (HTTP 404). Fayl koʻchirilgan, oʻchirilgan yoki uning saqlash joyi oflayn boʻlishi mumkin. Server egasidan faylni tekshirishni va kutubxonani qayta skanerlashni soʻrang.'; @override String get logsUploaded => 'Jurnallar yuklandi'; @override String get logsUploadFailed => 'Jurnallarni yuklab boʻlmadi'; @override String get logId => 'Jurnal ID-si'; @@ -921,6 +1052,8 @@ class _Translations$connections$uz extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => '${name} uchun seans vaqti tugadi'; @override String sessionExpiredMany({required Object count}) => '${count} server uchun seans vaqti tugadi'; @override String get signInAgain => 'Qaytadan kirish'; + @override String editMediaBrowserTitle({required Object product}) => '${product} ulanishini tahrirlash'; + @override String editMediaBrowserIntro({required Object serverName}) => '${serverName} uchun URL-larni qoʻshing yoki olib tashlang. Plezy eng kam kechikishga ega boʻlgan mavjud URL-dan foydalanadi.'; } // Path: discover @@ -1082,6 +1215,45 @@ class _Translations$logs$uz extends Translations$logs$en { @override String get uploadLogs => 'Jurnallarni yuklash'; } +// Path: startup +class _Translations$startup$uz extends Translations$startup$en { + _Translations$startup$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy ishga tusha olmadi'; + @override String get failedBody => 'Ishga tushirish paytida nimadir xato ketdi. Quyidagi tafsilotlar aynan nima muvaffaqiyatsiz boʻlganini koʻrsatadi.'; + @override String get failedBodyRepairable => 'Plezyning saqlangan sozlamalar fayli shikastlangan va Plezy ishga tushishidan oldin uni qayta tiklash kerak. Qayta urinish yordam bermaydi — Saqlashni tiklashni tanlang.'; + @override String get phaseLabel => 'Qadam'; + @override String get showDetails => 'Tafsilotlarni koʻrsatish'; + @override String get hideDetails => 'Tafsilotlarni yashirish'; + @override String get copyDetails => 'Tafsilotlarni nusxalash'; + @override String get detailsCopied => 'Tafsilotlar buferga nusxalandi'; + @override String get uploadDetails => 'Tafsilotlarni yuklash'; + @override String get repairStorage => 'Saqlashni tiklash'; + @override String get repairTitle => 'Saqlangan maʼlumotlar tikilsinmi?'; + @override String get repairBodyCommon => 'Plezyning sozlamalar fayli shikastlangan va uni oʻqib boʻlmaydi. Tiklash barcha sozlamalarni standart holatiga qaytaradi.'; + @override String get repairBodyOneCredential => 'Bitta saqlangan kirish maʼlumoti shikastlangan va uni oʻqib boʻlmaydi. Tiklash faqat uni olib tashlaydi; boshqa sozlamalaringizga tegilmaydi.'; + @override String get repairBodySignInsKept => 'Serverlaringiz va profillaringiz tizimga kirgan holda qoladi.'; + @override String get repairBodySignInsLost => 'Saqlangan kirish maʼlumotlaringizni himoya qiluvchi kalitni ushbu fayldan tiklab boʻlmaydi, shuning uchun har bir server va profilga qaytadan kirishingiz kerak boʻladi. Media serveringizdagi hech narsaga taʼsir qilmaydi.'; + @override String get repairBodySessionsUncertain => 'Trekerlar (MAL, AniList, Simkl, Trakt) va Seerr alohida saqlanadi va ular saqlanib qolishi ham, yoʻqolishi ham mumkin. Plezy aynan nimani saqlaganini sizga xabar qiladi.'; + @override String get repairConfirm => 'Tiklash'; + @override String get repairSucceeded => 'Saqlash tiklandi'; + @override String get repairNeedsRestart => 'Saqlash tiklandi — qayta ishga tushirish kerak'; + @override String get restartRequiredBody => 'Maʼlumotlaringiz tiklandi, lekin Plezy ulardan foydalanishi uchun yangidan ishga tushishi kerak. Plezy-ni yoping va qayta oching.'; + @override String get quitPlezy => 'Plezy-dan chiqish'; + @override String get repairFailed => 'Tiklash amalga oshmadi'; + @override String get repairKeptSignIns => 'Serverlaringiz va profillaringiz hali ham tizimga kirgan.'; + @override String get repairLostSignIns => 'Saqlangan kirish maʼlumotlaringizni himoya qiluvchi kalitni tiklab boʻlmadi. Har bir server va profilga qaytadan kirishingiz kerak boʻladi.'; + @override String get repairLostSessions => 'Kamida bitta treker yoki Seerr ulanishi yoʻqoldi va uni qayta ulash kerak.'; + @override String get backupTitle => 'Shikastlangan faylning nusxasi saqlab qoʻyildi'; + @override String get backupWarning => 'Unda kirish hisob maʼlumotlaringiz bor. Uni yuklamang yoki baham koʻrmang.'; + @override String get deleteBackup => 'Nusxani oʻchirish'; + @override String get backupDeleted => 'Nusxa oʻchirildi.'; + @override String get previousFailureTitle => 'Plezy oxirgi marta ishga tushmadi'; +} + // Path: licenses class _Translations$licenses$uz extends Translations$licenses$en { _Translations$licenses$uz._(TranslationsUz root) : this._root = root, super.internal(root); @@ -1137,6 +1309,20 @@ class _Translations$explore$uz extends Translations$explore$en { @override String searchEmpty({required Object query}) => '"${query}" boʻyicha natija topilmadi'; @override String searchPrompt({required Object source}) => '${source} orqali filmlar va seriallarni qidiring.'; @override String get searchFailed => 'Qidiruv xatoligi. Ulanishni tekshiring.'; + @override late final _Translations$explore$badge$uz badge = _Translations$explore$badge$uz._(_root); + @override late final _Translations$explore$stats$uz stats = _Translations$explore$stats$uz._(_root); + @override late final _Translations$explore$season$uz season = _Translations$explore$season$uz._(_root); + @override late final _Translations$explore$format$uz format = _Translations$explore$format$uz._(_root); + @override late final _Translations$explore$sourceMaterial$uz sourceMaterial = _Translations$explore$sourceMaterial$uz._(_root); + @override late final _Translations$explore$creditRole$uz creditRole = _Translations$explore$creditRole$uz._(_root); + @override late final _Translations$explore$relation$uz relation = _Translations$explore$relation$uz._(_root); + @override String broadcast({required Object day, required Object time}) => '${day} kuni soat ${time} da efirga uzatiladi'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '${day} kuni soat ${time} ${timezone} da efirga uzatiladi'; + @override late final _Translations$explore$detail$uz detail = _Translations$explore$detail$uz._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, + one: '${n} ta natija', + other: '${n} ta natija', + ); } // Path: liveTv @@ -1810,9 +1996,12 @@ class _Translations$addServer$uz extends Translations$addServer$en { final TranslationsUz _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '${product} serverini qoʻshish'; @override String get serverUrls => 'Server URL-lari'; @override String get serverUrlsHelper => 'Vergul bilan ajratilgan bir nechta URL manziliga ruxsat beriladi.'; @override String get findServer => 'Serverni topish'; + @override String searchingLocalMediaBrowserServers({required Object product}) => 'Mahalliy ${product} serverlari qidirilmoqda...'; + @override String localMediaBrowserServers({required Object product}) => 'Mahalliy ${product} serverlari'; @override String get username => 'Foydalanuvchi nomi'; @override String get password => 'Parol'; @override String get signIn => 'Kirish'; @@ -1824,15 +2013,39 @@ class _Translations$addServer$uz extends Translations$addServer$en { @override String get addPlexTitle => 'Plex orqali kirish'; @override String get pinExpired => 'PIN kod vaqti tugadi.'; @override String failedToRegisterAccount({required Object error}) => 'Hisobni roʻyxatdan oʻtkazishda xatolik: ${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '${product} server URL-ini kiriting'; @override String get addConnectionTitle => 'Ulanish qoʻshish'; @override String addConnectionTitleScoped({required Object name}) => '${name} profiliga qoʻshish'; @override String get signInWithPlexCard => 'Plex orqali kirish'; @override String get signInWithPlexCardSubtitle => 'Ushbu qurilmani avtorizatsiya qiling.'; @override String get signInWithPlexCardSubtitleScoped => 'Plex hisobini avtorizatsiya qiling.'; + @override String connectToMediaBrowserCard({required Object product}) => '${product}ga ulanish'; + @override String get connectToMediaBrowserCardSubtitle => 'Server URL-ini, foydalanuvchi nomini va parolni kiriting.'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '${product} serveringizga kiring. ${name} profiliga bogʻlanadi.'; @override String get borrowFromAnotherProfile => 'Boshqa profildan olish'; @override String get borrowFromAnotherProfileSubtitle => 'Boshqa profilning ulanishidan qayta foydalaning.'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$uz extends Translations$common$ratingSource$en { + _Translations$common$ratingSource$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get critic => 'Tanqidchilar'; + @override String get audience => 'Tomoshabinlar'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes tanqidchilari'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes tomoshabinlari'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$uz extends Translations$hotkeys$actions$en { _Translations$hotkeys$actions$uz._(TranslationsUz root) : this._root = root, super.internal(root); @@ -1996,6 +2209,186 @@ class _Translations$explore$status$uz extends Translations$explore$status$en { @override String get upcoming => 'Kutilmoqda'; } +// Path: explore.badge +class _Translations$explore$badge$uz extends Translations$explore$badge$en { + _Translations$explore$badge$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} mashhur'; + @override String rankAiring({required Object n}) => '#${n} efirda'; + @override String rankRated({required Object n}) => '#${n} baholangan'; + @override String rankFavorited({required Object n}) => '#${n} tanlanganlarga qoʻshilgan'; + @override String rankTrending({required Object n}) => '#${n} ommabop'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} ${season} mavsumida'; + @override String watchingNow({required Object n}) => '${n} kishi tomosha qilmoqda'; + @override String get available => 'Mavjud'; + @override String get partiallyAvailable => 'Qisman mavjud'; + @override String get availableIn4k => '4K mavjud'; + @override String get requested => 'Soʻralgan'; + @override String get pendingApproval => 'Tasdiq kutilmoqda'; + @override String get processing => 'Ishlanmoqda'; + @override String get declined => 'Rad etilgan'; + @override String get requestFailed => 'Soʻrov amalga oshmadi'; + @override String get requested4k => '4K soʻralgan'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} mavsum'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => '${episode}-qism ${duration} ichida'; + @override String nextAiringIn({required Object duration}) => 'Keyingisi ${duration} ichida'; + @override String episodesShort({required Object n}) => '${n} qism'; + @override String minutesPerEpisode({required Object n}) => '${n} daq/qism'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$uz extends Translations$explore$stats$en { + _Translations$explore$stats$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} roʻyxatda'; + @override String viewersDay({required Object n}) => 'Bugun ${n} kishi tomosha qildi'; + @override String viewersWeek({required Object n}) => 'Bu hafta ${n} kishi tomosha qildi'; + @override String viewersMonth({required Object n}) => 'Bu oy ${n} kishi tomosha qildi'; + @override String viewersYear({required Object n}) => 'Bu yil ${n} kishi tomosha qildi'; + @override String viewersAllTime({required Object n}) => '${n} kishi tomosha qilgan'; + @override String planning({required Object n}) => '${n} kishi tomosha qilishni rejalashtirmoqda'; + @override String favorited({required Object n}) => '${n} ta tanlangan'; + @override String dropRate({required Object percent}) => '${percent} tomosha qilishni toʻxtatgan'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, + one: '${n} ta izoh', + other: '${n} ta izoh', + ); + @override String votes({required Object n}) => '${n} ta ovoz'; + @override String watching({required Object n}) => '${n} kishi tomosha qilmoqda'; + @override String completed({required Object n}) => '${n} kishi yakunlagan'; + @override String onHold({required Object n}) => '${n} kishi toʻxtatib turibdi'; + @override String dropped({required Object n}) => '${n} kishi toʻxtatgan'; +} + +// Path: explore.season +class _Translations$explore$season$uz extends Translations$explore$season$en { + _Translations$explore$season$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get winter => 'Qish'; + @override String get spring => 'Bahor'; + @override String get summer => 'Yoz'; + @override String get fall => 'Kuz'; + @override String withYear({required Object season, required Object year}) => '${season} ${year}'; +} + +// Path: explore.format +class _Translations$explore$format$uz extends Translations$explore$format$en { + _Translations$explore$format$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'Qisqa TV'; + @override String get movie => 'Film'; + @override String get special => 'Maxsus'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => 'Musiqa'; + @override String get other => 'Boshqa'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$uz extends Translations$explore$sourceMaterial$en { + _Translations$explore$sourceMaterial$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get original => 'Asl'; + @override String get manga => 'Manga'; + @override String get lightNovel => 'Light novel'; + @override String get novel => 'Roman'; + @override String get visualNovel => 'Visual novel'; + @override String get game => 'Oʻyin'; + @override String get webComic => 'Veb-komiks'; + @override String get musicRelease => 'Musiqa'; + @override String get otherMedia => 'Boshqa'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$uz extends Translations$explore$creditRole$en { + _Translations$explore$creditRole$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get director => 'Rejissyor'; + @override String get writer => 'Ssenarist'; + @override String get producer => 'Prodyuser'; + @override String get creator => 'Muallif'; + @override String get composer => 'Bastakor'; +} + +// Path: explore.relation +class _Translations$explore$relation$uz extends Translations$explore$relation$en { + _Translations$explore$relation$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get prequel => 'Prikvel'; + @override String get sequel => 'Sikvel'; + @override String get sideStory => 'Yon hikoya'; + @override String get spinOff => 'Spin-off'; + @override String get alternativeVersion => 'Muqobil versiya'; + @override String get summary => 'Xulosa'; + @override String get parentStory => 'Asosiy hikoya'; + @override String get adaptation => 'Adaptatsiya'; + @override String get other => 'Bogʻliq'; +} + +// Path: explore.detail +class _Translations$explore$detail$uz extends Translations$explore$detail$en { + _Translations$explore$detail$uz._(TranslationsUz root) : this._root = root, super.internal(root); + + final TranslationsUz _root; // ignore: unused_field + + // Translations + @override String get originalTitle => 'Asl nomi'; + @override String get alsoKnownAs => 'Boshqa nomi bilan ham tanilgan'; + @override String get studios => 'Studiyalar'; + @override String get country => 'Mamlakat'; + @override String get language => 'Til'; + @override String get released => 'Chiqarilgan'; + @override String get physicalRelease => 'Diskda'; + @override String get ended => 'Yakunlangan'; + @override String addedOn({required Object date}) => '${date} da qoʻshilgan'; + @override String get yourRating => 'Sizning bahoyingiz'; + @override String get budget => 'Byudjet'; + @override String get revenue => 'Kassa yigʻimi'; + @override String get contentAdvisory => 'Yosh cheklovi'; + @override String get tags => 'Teglar'; + @override String get revealSpoilerTags => 'Spoyler teglarini koʻrsatish'; + @override String get links => 'Havolalar'; + @override String get watchOn => 'Tomosha qilish'; + @override String get watchTrailer => 'Treylerni koʻrish'; + @override String openOn({required Object site}) => '${site} da ochish'; + @override String get crew => 'Jamoa'; + @override String get ratings => 'Baholar'; + @override String get schedule => 'Jadval'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, + one: '${n} foydalanuvchi tavsiya qilgan', + other: '${n} foydalanuvchi tavsiya qilgan', + ); + @override String recommendedBy({required Object who}) => '${who} tavsiya qilgan'; + @override String favoritedBy({required Object who}) => '${who} tanlanganlarga qoʻshgan'; + @override String unairedEpisodes({required Object n}) => '${n} hali efirga chiqmagan'; + @override String recommendedByPercent({required Object percent}) => 'Tomoshabinlarning ${percent} tavsiya qilgan'; + @override String get relatedTitles => 'Bogʻliq nomlar'; + @override String get background => 'Orqa fon'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$uz extends Translations$downloads$backgroundWarning$en { _Translations$downloads$backgroundWarning$uz._(TranslationsUz root) : this._root = root, super.internal(root); @@ -2139,6 +2532,7 @@ class _Translations$services$names$uz extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2208,6 +2602,7 @@ extension on TranslationsUz { 'auth.waitingForAuth' => 'Tasdiqlanish kutilmoqda...\nBrauzeringizdan kiring.', 'auth.useBrowser' => 'Brauzerdan foydalanish', 'auth.or' => 'yoki', + 'auth.connectToMediaBrowser' => ({required Object product}) => '${product}ga ulanish', 'auth.useQuickConnect' => 'Tezkor ulanishdan foydalanish', 'auth.quickConnectInstructions' => 'Jellyfin-da Tezkor ulanishni oching va ushbu kodni kiriting.', 'auth.quickConnectWaiting' => 'Tasdiq kutilmoqda…', @@ -2259,6 +2654,17 @@ extension on TranslationsUz { 'common.fullscreen' => 'Toʻliq ekran', 'common.exitFullscreen' => 'Toʻliq ekrandan chiqish', 'common.pressBackAgainToExit' => 'Chiqish uchun orqaga tugmasini yana bir bor bosing', + 'common.ratingSource.critic' => 'Tanqidchilar', + 'common.ratingSource.audience' => 'Tomoshabinlar', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes tanqidchilari', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes tomoshabinlari', 'screens.licenses' => 'Litsenziyalar', 'screens.switchProfile' => 'Profilni almashtirish', 'screens.subtitleStyling' => 'Subtitr sozlamalari', @@ -2295,6 +2701,7 @@ extension on TranslationsUz { 'settings.darkTheme' => 'Toʻq', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => 'Kutubxona zichligi', + 'settings.displayScale' => 'Ekran miqyosi', 'settings.compact' => 'Ixcham', 'settings.comfortable' => 'Qulay', 'settings.tvCornerSpotlightBackdrop' => 'Burchak yoritish foni', @@ -2344,6 +2751,11 @@ extension on TranslationsUz { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => 'Avtomatik (Tavsiya etilgan)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} MB Xotira mavjud. ${size} MB bufer ijroga taʼsir qilishi mumkin.', + 'settings.playbackBuffer' => 'Ijro buferi', + 'settings.playbackBufferAuto' => 'Avto (tavsiya etiladi)', + 'settings.playbackBufferLarge' => 'Katta', + 'settings.playbackBufferExtraLarge' => 'Juda katta', + 'settings.playbackBufferDescription' => 'Beqaror ulanishlarga qarshi koʻproq buferlaydi. Bufer hajmi bilan ham cheklanadi.', 'settings.defaultQualityTitle' => 'Standart sifat', 'settings.musicQualityTitle' => 'Musiqa sifati', 'settings.subtitleStyling' => 'Subtitr sozlamalari', @@ -2563,29 +2975,118 @@ extension on TranslationsUz { 'hotkeys.actions.skipMarker' => 'Intro/Titrlarni oʻtkazib yuborish', 'hotkeys.actions.screenshot' => 'Ekran tasvirini olish', 'fileInfo.title' => 'Fayl haqida maʼlumot', + 'fileInfo.overview' => 'Tavsif', 'fileInfo.video' => 'Video', 'fileInfo.audio' => 'Audio', 'fileInfo.subtitles' => 'Subtitrlar', + 'fileInfo.images' => 'Ichiga joylangan rasmlar', + 'fileInfo.dataStreams' => 'Maʼlumot oqimlari', + 'fileInfo.lyrics' => 'Qoʻshiq matni', 'fileInfo.file' => 'Fayl', + 'fileInfo.attachments' => 'Biriktirilgan fayllar', + 'fileInfo.delivery' => 'Yetkazib berish', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => '${index}-versiya (${count} tadan)', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => '${index}-fayl (${count} tadan)', + 'fileInfo.noStreams' => 'Server ushbu fayl uchun oqimlar mavjud emasligini bildirdi.', + 'fileInfo.copyPath' => 'Yoʻlni nusxalash', + 'fileInfo.pathCopied' => 'Fayl yoʻli nusxalandi', 'fileInfo.codec' => 'Kodek', + 'fileInfo.codecTag' => 'Kodek yorligʻi', 'fileInfo.resolution' => 'Oʻlchamlari (Resolution)', + 'fileInfo.codedResolution' => 'Kodlangan oʻlcham', 'fileInfo.bitrate' => 'Bitreyt (Bitrate)', 'fileInfo.frameRate' => 'Kadrlar chastotasi', + 'fileInfo.rotation' => 'Burilish', + 'fileInfo.comment' => 'Izoh', + 'fileInfo.audioDescription' => 'Audio tavsif', + 'fileInfo.headerCompression' => 'Sarlavha siqish', + 'fileInfo.sidecarFile' => 'Yordamchi fayl', + 'fileInfo.transportTimestamp' => 'Transport vaqt belgisi', + 'fileInfo.displayOffset' => 'Koʻrsatish siljishi', + 'fileInfo.previewFailureCode' => 'Oldindan koʻrish xatosi kodi', + 'fileInfo.previewRetries' => 'Oldindan koʻrish urinishlari', 'fileInfo.aspectRatio' => 'Tomonlar nisbati', + 'fileInfo.pixelAspectRatio' => 'Piksel tomonlar nisbati', 'fileInfo.profile' => 'Profil', + 'fileInfo.level' => 'Daraja', 'fileInfo.bitDepth' => 'Bit chuqurligi', + 'fileInfo.pixelFormat' => 'Piksel formati', 'fileInfo.colorSpace' => 'Rang makoni', 'fileInfo.colorRange' => 'Rang diapazoni', 'fileInfo.colorPrimaries' => 'Asosiy ranglar', + 'fileInfo.colorTransfer' => 'Rang uzatish', 'fileInfo.chromaSubsampling' => 'Rangli subdiskretlash', + 'fileInfo.chromaLocation' => 'Chroma joylashuvi', + 'fileInfo.scanType' => 'Skanerlash turi', + 'fileInfo.interlaced' => 'Interleys', + 'fileInfo.anamorphic' => 'Anamorfik', + 'fileInfo.referenceFrames' => 'Tayanch kadrlar', + 'fileInfo.dynamicRange' => 'Dinamik diapazon', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision darajasi', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision versiyasi', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision qatlamlari', + 'fileInfo.baseLayerCompatibility' => 'Asosiy qatlam mosligi', + 'fileInfo.avcBitstream' => 'AVC bit oqimi', + 'fileInfo.nalLengthSize' => 'NAL uzunlik oʻlchami', + 'fileInfo.scalingMatrix' => 'Maxsus masshtablash matritsasi', + 'fileInfo.streamIdentifier' => 'Oqim identifikatori', + 'fileInfo.streamIndex' => 'Oqim indeksi', + 'fileInfo.streamId' => 'Oqim ID-si', + 'fileInfo.language' => 'Til', + 'fileInfo.languageCode' => 'Til kodi', + 'fileInfo.streamTitle' => 'Trek nomi', 'fileInfo.channels' => 'Kanallar', + 'fileInfo.sampleRate' => 'Namuna tezligi', + 'fileInfo.spatialAudio' => 'Fazoviy audio', + 'fileInfo.textBased' => 'Matnga asoslangan', + 'fileInfo.subtitleFormat' => 'Yordamchi format', + 'fileInfo.provider' => 'Provayder', + 'fileInfo.matchScore' => 'Moslik darajasi', + 'fileInfo.externalDelivery' => 'Alohida uzatilishi mumkin', + 'fileInfo.sidecarPath' => 'Yordamchi fayl yoʻli', + 'fileInfo.sourceStream' => 'Nusxa olingan manba', + 'fileInfo.temporary' => 'Vaqtinchalik', + 'fileInfo.timeBase' => 'Vaqt bazasi', 'fileInfo.overallBitrate' => 'Umumiy bitreyt', 'fileInfo.path' => 'Yoʻl', + 'fileInfo.fileName' => 'Fayl nomi', 'fileInfo.size' => 'Hajmi', + 'fileInfo.totalSize' => 'Umumiy hajm', 'fileInfo.container' => 'Konteyner', 'fileInfo.duration' => 'Davomiyligi', + 'fileInfo.previewThumbnails' => 'Oldindan koʻrish eskizlari', + 'fileInfo.previewIndex' => 'Oldindan koʻrish indeksi', + 'fileInfo.packetLength' => 'Paket uzunligi', + 'fileInfo.filePresent' => 'Fayl mavjud', + 'fileInfo.fileReadable' => 'Server tomonidan oʻqiladigan', + 'fileInfo.streamPath' => 'Oqim yoʻli', 'fileInfo.optimizedForStreaming' => 'Oqimli uzatish uchun optimallashtirilgan', 'fileInfo.has64bitOffsets' => '64-bitli siljishlar', + 'fileInfo.protocol' => 'Protokol', + 'fileInfo.mediaType' => 'Media turi', + 'fileInfo.sourceKind' => 'Manba turi', + 'fileInfo.optimizedVersion' => 'Optimallashtirilgan versiya', + 'fileInfo.optimizationTarget' => 'Optimallashtirish maqsadi', + 'fileInfo.deletedAt' => 'Oʻchirilgan', + 'fileInfo.remoteSource' => 'Masofaviy manba', + 'fileInfo.infiniteStream' => 'Cheksiz oqim', + 'fileInfo.directPlay' => 'Toʻgʻridan-toʻgʻri ijro', + 'fileInfo.directStream' => 'Toʻgʻridan-toʻgʻri oqim', + 'fileInfo.transcoding' => 'Qayta kodlash', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => 'Versiya ID-si', + 'fileInfo.fileId' => 'Fayl ID-si', + 'fileInfo.defaultAudioTrack' => 'Standart audio trek', + 'fileInfo.defaultSubtitleTrack' => 'Standart subtitr treki', + 'fileInfo.subtitlesOff' => 'Oʻchirilgan', + 'fileInfo.flagDefault' => 'Standart', + 'fileInfo.flagForced' => 'Majburiy', + 'fileInfo.flagSelected' => 'Tanlangan', + 'fileInfo.flagExternal' => 'Tashqi', + 'fileInfo.flagHearingImpaired' => 'Eshitishida nuqsoni borlar uchun', + 'fileInfo.flagDub' => 'Dublyaj', + 'fileInfo.flagOriginal' => 'Asl', 'mediaMenu.markAsWatched' => 'Koʻrilgan deb belgilash', 'mediaMenu.markAsUnwatched' => 'Koʻrilmagan deb belgilash', 'mediaMenu.removeFromContinueWatching' => '"Tomoshani davom ettirish"dan oʻchirish', @@ -2594,7 +3095,28 @@ extension on TranslationsUz { 'mediaMenu.shufflePlay' => 'Aralashtirib ijro etish', 'mediaMenu.shuffleNotAvailableOffline' => 'Aralashtirib ijro etish oflayn rejimda mavjud emas', 'mediaMenu.fileInfo' => 'Fayl haqida maʼlumot', + 'mediaMenu.deleteEpisodeFromServer' => 'Qismni serverdan oʻchirish', + 'mediaMenu.deleteSeasonFromServer' => 'Mavsumni serverdan oʻchirish', + 'mediaMenu.deleteShowFromServer' => 'Shouni serverdan oʻchirish', + 'mediaMenu.deleteMovieFromServer' => 'Filmni serverdan oʻchirish', + 'mediaMenu.deleteEpisodeTitle' => 'Ushbu qism oʻchirilsinmi?', + 'mediaMenu.deleteSeasonTitle' => 'Ushbu mavsum oʻchirilsinmi?', + 'mediaMenu.deleteShowTitle' => 'Ushbu shou oʻchirilsinmi?', + 'mediaMenu.deleteMovieTitle' => 'Ushbu film oʻchirilsinmi?', + 'mediaMenu.deleteEpisodeConfirm' => 'Qismni oʻchirish', + 'mediaMenu.deleteSeasonConfirm' => 'Mavsumni oʻchirish', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => 'Shouni oʻchirish', + 'mediaMenu.deleteMovieConfirm' => 'Filmni oʻchirish', + 'mediaMenu.deleteAnyway' => 'Baribir oʻchirish', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '${title} serveringizdan butunlay oʻchirilsinmi?', 'mediaMenu.deleteMultipleWarning' => 'Bu barcha qismlar va fayllarga taʼsir qiladi.', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, one: 'Bu undagi barcha ${n} qismni va uning faylini oʻchiradi.', other: 'Bu undagi barcha ${n} qismni va ularning fayllarini oʻchiradi.', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, one: 'Bu element ${n} fayl shaklida saqlanadi va u oʻchiriladi.', other: 'Bu element ${n} faylda saqlanadi va ularning barchasi oʻchiriladi.', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, one: 'Xuddi shu faylda yana ${n} qism saqlanadi va u ham oʻchiriladi:', other: 'Xuddi shu faylda yana ${n} qism saqlanadi va ular ham oʻchiriladi:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy qaysi fayllar olib tashlanishini tekshira olmadi, shuning uchun u yuqorida koʻrsatilgan elementdan koʻproq narsani oʻchirishi mumkin. Bekor qilib qaytadan urining yoki baribir oʻchiring.', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => 'Serveringiz ushbu element uchun fayl tafsilotlarini taqdim etmadi, shuning uchun Plezy qaysi fayllar olib tashlanishini tekshira olmaydi. U yuqorida koʻrsatilgan elementdan koʻproq narsani oʻchirishi mumkin.', 'mediaMenu.mediaDeletedSuccessfully' => 'Media elementi muvaffaqiyatli oʻchirildi', 'mediaMenu.mediaFailedToDelete' => 'Media elementini oʻchirib boʻlmadi', 'mediaMenu.rate' => 'Baho berish', @@ -2660,6 +3182,9 @@ extension on TranslationsUz { 'videoControls.playNext' => 'Keyingisini ijro etish', 'videoControls.playButton' => 'Ijro etish', 'videoControls.pauseButton' => 'Pauza', + 'videoControls.playbackPaused' => 'Pauza', + 'videoControls.playbackResumed' => 'Ijro etilmoqda', + 'videoControls.loadingVideo' => 'Video yuklanmoqda', 'videoControls.showPlaybackControls' => 'Boshqaruv tugmalarini koʻrsatish', 'videoControls.hidePlaybackControls' => 'Boshqaruv tugmalarini yashirish', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '${seconds} soniya orqaga oʻtkazish', @@ -2711,8 +3236,6 @@ extension on TranslationsUz { 'videoControls.searchSubtitles' => 'Subtitr qidirish', 'videoControls.language' => 'Til', 'videoControls.noSubtitlesFound' => 'Subtitr topilmadi', - _ => null, - } ?? switch (path) { 'videoControls.subtitleDownloaded' => 'Subtitr yuklab olindi', 'videoControls.subtitleDownloadedNotApplied' => 'Subtitr yuklab olindi, lekin qoʻllanilmadi', 'videoControls.subtitleDownloadFailed' => 'Subtitrni yuklab boʻlmadi', @@ -2764,6 +3287,8 @@ extension on TranslationsUz { 'messages.switchingToCompatiblePlayer' => 'Mos keluvchi pleyerga oʻtilmoqda...', 'messages.serverLimitTitle' => 'Ijro etishda xatolik', 'messages.serverLimitBody' => 'Server xatoligi (HTTP 500). Cheklov ushbu seansni rad etdi.', + 'messages.mediaUnreadableTitle' => 'Fayl mavjud emas', + 'messages.mediaUnreadableBody' => 'Server bu elementni topdi, lekin uning faylini oʻqiy olmadi (HTTP 404). Fayl koʻchirilgan, oʻchirilgan yoki uning saqlash joyi oflayn boʻlishi mumkin. Server egasidan faylni tekshirishni va kutubxonani qayta skanerlashni soʻrang.', 'messages.logsUploaded' => 'Jurnallar yuklandi', 'messages.logsUploadFailed' => 'Jurnallarni yuklab boʻlmadi', 'messages.logId' => 'Jurnal ID-si', @@ -2872,6 +3397,8 @@ extension on TranslationsUz { 'connections.sessionExpiredOne' => ({required Object name}) => '${name} uchun seans vaqti tugadi', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} server uchun seans vaqti tugadi', 'connections.signInAgain' => 'Qaytadan kirish', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '${product} ulanishini tahrirlash', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '${serverName} uchun URL-larni qoʻshing yoki olib tashlang. Plezy eng kam kechikishga ega boʻlgan mavjud URL-dan foydalanadi.', 'discover.title' => 'Kashf qilish', 'discover.noContentAvailable' => 'Kontent mavjud emas', 'discover.addMediaToLibraries' => 'Kutubxonalaringizga media qoʻshing', @@ -3005,6 +3532,36 @@ extension on TranslationsUz { 'logs.clearLogs' => 'Jurnallarni tozalash', 'logs.copyLogs' => 'Jurnallarni nusxalash', 'logs.uploadLogs' => 'Jurnallarni yuklash', + 'startup.failedTitle' => 'Plezy ishga tusha olmadi', + 'startup.failedBody' => 'Ishga tushirish paytida nimadir xato ketdi. Quyidagi tafsilotlar aynan nima muvaffaqiyatsiz boʻlganini koʻrsatadi.', + 'startup.failedBodyRepairable' => 'Plezyning saqlangan sozlamalar fayli shikastlangan va Plezy ishga tushishidan oldin uni qayta tiklash kerak. Qayta urinish yordam bermaydi — Saqlashni tiklashni tanlang.', + 'startup.phaseLabel' => 'Qadam', + 'startup.showDetails' => 'Tafsilotlarni koʻrsatish', + 'startup.hideDetails' => 'Tafsilotlarni yashirish', + 'startup.copyDetails' => 'Tafsilotlarni nusxalash', + 'startup.detailsCopied' => 'Tafsilotlar buferga nusxalandi', + 'startup.uploadDetails' => 'Tafsilotlarni yuklash', + 'startup.repairStorage' => 'Saqlashni tiklash', + 'startup.repairTitle' => 'Saqlangan maʼlumotlar tikilsinmi?', + 'startup.repairBodyCommon' => 'Plezyning sozlamalar fayli shikastlangan va uni oʻqib boʻlmaydi. Tiklash barcha sozlamalarni standart holatiga qaytaradi.', + 'startup.repairBodyOneCredential' => 'Bitta saqlangan kirish maʼlumoti shikastlangan va uni oʻqib boʻlmaydi. Tiklash faqat uni olib tashlaydi; boshqa sozlamalaringizga tegilmaydi.', + 'startup.repairBodySignInsKept' => 'Serverlaringiz va profillaringiz tizimga kirgan holda qoladi.', + 'startup.repairBodySignInsLost' => 'Saqlangan kirish maʼlumotlaringizni himoya qiluvchi kalitni ushbu fayldan tiklab boʻlmaydi, shuning uchun har bir server va profilga qaytadan kirishingiz kerak boʻladi. Media serveringizdagi hech narsaga taʼsir qilmaydi.', + 'startup.repairBodySessionsUncertain' => 'Trekerlar (MAL, AniList, Simkl, Trakt) va Seerr alohida saqlanadi va ular saqlanib qolishi ham, yoʻqolishi ham mumkin. Plezy aynan nimani saqlaganini sizga xabar qiladi.', + 'startup.repairConfirm' => 'Tiklash', + 'startup.repairSucceeded' => 'Saqlash tiklandi', + 'startup.repairNeedsRestart' => 'Saqlash tiklandi — qayta ishga tushirish kerak', + 'startup.restartRequiredBody' => 'Maʼlumotlaringiz tiklandi, lekin Plezy ulardan foydalanishi uchun yangidan ishga tushishi kerak. Plezy-ni yoping va qayta oching.', + 'startup.quitPlezy' => 'Plezy-dan chiqish', + 'startup.repairFailed' => 'Tiklash amalga oshmadi', + 'startup.repairKeptSignIns' => 'Serverlaringiz va profillaringiz hali ham tizimga kirgan.', + 'startup.repairLostSignIns' => 'Saqlangan kirish maʼlumotlaringizni himoya qiluvchi kalitni tiklab boʻlmadi. Har bir server va profilga qaytadan kirishingiz kerak boʻladi.', + 'startup.repairLostSessions' => 'Kamida bitta treker yoki Seerr ulanishi yoʻqoldi va uni qayta ulash kerak.', + 'startup.backupTitle' => 'Shikastlangan faylning nusxasi saqlab qoʻyildi', + 'startup.backupWarning' => 'Unda kirish hisob maʼlumotlaringiz bor. Uni yuklamang yoki baham koʻrmang.', + 'startup.deleteBackup' => 'Nusxani oʻchirish', + 'startup.backupDeleted' => 'Nusxa oʻchirildi.', + 'startup.previousFailureTitle' => 'Plezy oxirgi marta ishga tushmadi', 'licenses.relatedPackages' => 'Bogʻliq paketlar', 'licenses.license' => 'Litsenziya', 'licenses.licenseNumber' => ({required Object number}) => 'Litsenziya ${number}', @@ -3048,6 +3605,113 @@ extension on TranslationsUz { 'explore.searchEmpty' => ({required Object query}) => '"${query}" boʻyicha natija topilmadi', 'explore.searchPrompt' => ({required Object source}) => '${source} orqali filmlar va seriallarni qidiring.', 'explore.searchFailed' => 'Qidiruv xatoligi. Ulanishni tekshiring.', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} mashhur', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} efirda', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} baholangan', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} tanlanganlarga qoʻshilgan', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} ommabop', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} ${season} mavsumida', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} kishi tomosha qilmoqda', + 'explore.badge.available' => 'Mavjud', + 'explore.badge.partiallyAvailable' => 'Qisman mavjud', + 'explore.badge.availableIn4k' => '4K mavjud', + 'explore.badge.requested' => 'Soʻralgan', + 'explore.badge.pendingApproval' => 'Tasdiq kutilmoqda', + 'explore.badge.processing' => 'Ishlanmoqda', + 'explore.badge.declined' => 'Rad etilgan', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => 'Soʻrov amalga oshmadi', + 'explore.badge.requested4k' => '4K soʻralgan', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} mavsum', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => '${episode}-qism ${duration} ichida', + 'explore.badge.nextAiringIn' => ({required Object duration}) => 'Keyingisi ${duration} ichida', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} qism', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} daq/qism', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} roʻyxatda', + 'explore.stats.viewersDay' => ({required Object n}) => 'Bugun ${n} kishi tomosha qildi', + 'explore.stats.viewersWeek' => ({required Object n}) => 'Bu hafta ${n} kishi tomosha qildi', + 'explore.stats.viewersMonth' => ({required Object n}) => 'Bu oy ${n} kishi tomosha qildi', + 'explore.stats.viewersYear' => ({required Object n}) => 'Bu yil ${n} kishi tomosha qildi', + 'explore.stats.viewersAllTime' => ({required Object n}) => '${n} kishi tomosha qilgan', + 'explore.stats.planning' => ({required Object n}) => '${n} kishi tomosha qilishni rejalashtirmoqda', + 'explore.stats.favorited' => ({required Object n}) => '${n} ta tanlangan', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} tomosha qilishni toʻxtatgan', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, one: '${n} ta izoh', other: '${n} ta izoh', ), + 'explore.stats.votes' => ({required Object n}) => '${n} ta ovoz', + 'explore.stats.watching' => ({required Object n}) => '${n} kishi tomosha qilmoqda', + 'explore.stats.completed' => ({required Object n}) => '${n} kishi yakunlagan', + 'explore.stats.onHold' => ({required Object n}) => '${n} kishi toʻxtatib turibdi', + 'explore.stats.dropped' => ({required Object n}) => '${n} kishi toʻxtatgan', + 'explore.season.winter' => 'Qish', + 'explore.season.spring' => 'Bahor', + 'explore.season.summer' => 'Yoz', + 'explore.season.fall' => 'Kuz', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'Qisqa TV', + 'explore.format.movie' => 'Film', + 'explore.format.special' => 'Maxsus', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => 'Musiqa', + 'explore.format.other' => 'Boshqa', + 'explore.sourceMaterial.original' => 'Asl', + 'explore.sourceMaterial.manga' => 'Manga', + 'explore.sourceMaterial.lightNovel' => 'Light novel', + 'explore.sourceMaterial.novel' => 'Roman', + 'explore.sourceMaterial.visualNovel' => 'Visual novel', + 'explore.sourceMaterial.game' => 'Oʻyin', + 'explore.sourceMaterial.webComic' => 'Veb-komiks', + 'explore.sourceMaterial.musicRelease' => 'Musiqa', + 'explore.sourceMaterial.otherMedia' => 'Boshqa', + 'explore.creditRole.director' => 'Rejissyor', + 'explore.creditRole.writer' => 'Ssenarist', + 'explore.creditRole.producer' => 'Prodyuser', + 'explore.creditRole.creator' => 'Muallif', + 'explore.creditRole.composer' => 'Bastakor', + 'explore.relation.prequel' => 'Prikvel', + 'explore.relation.sequel' => 'Sikvel', + 'explore.relation.sideStory' => 'Yon hikoya', + 'explore.relation.spinOff' => 'Spin-off', + 'explore.relation.alternativeVersion' => 'Muqobil versiya', + 'explore.relation.summary' => 'Xulosa', + 'explore.relation.parentStory' => 'Asosiy hikoya', + 'explore.relation.adaptation' => 'Adaptatsiya', + 'explore.relation.other' => 'Bogʻliq', + 'explore.broadcast' => ({required Object day, required Object time}) => '${day} kuni soat ${time} da efirga uzatiladi', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '${day} kuni soat ${time} ${timezone} da efirga uzatiladi', + 'explore.detail.originalTitle' => 'Asl nomi', + 'explore.detail.alsoKnownAs' => 'Boshqa nomi bilan ham tanilgan', + 'explore.detail.studios' => 'Studiyalar', + 'explore.detail.country' => 'Mamlakat', + 'explore.detail.language' => 'Til', + 'explore.detail.released' => 'Chiqarilgan', + 'explore.detail.physicalRelease' => 'Diskda', + 'explore.detail.ended' => 'Yakunlangan', + 'explore.detail.addedOn' => ({required Object date}) => '${date} da qoʻshilgan', + 'explore.detail.yourRating' => 'Sizning bahoyingiz', + 'explore.detail.budget' => 'Byudjet', + 'explore.detail.revenue' => 'Kassa yigʻimi', + 'explore.detail.contentAdvisory' => 'Yosh cheklovi', + 'explore.detail.tags' => 'Teglar', + 'explore.detail.revealSpoilerTags' => 'Spoyler teglarini koʻrsatish', + 'explore.detail.links' => 'Havolalar', + 'explore.detail.watchOn' => 'Tomosha qilish', + 'explore.detail.watchTrailer' => 'Treylerni koʻrish', + 'explore.detail.openOn' => ({required Object site}) => '${site} da ochish', + 'explore.detail.crew' => 'Jamoa', + 'explore.detail.ratings' => 'Baholar', + 'explore.detail.schedule' => 'Jadval', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, one: '${n} foydalanuvchi tavsiya qilgan', other: '${n} foydalanuvchi tavsiya qilgan', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '${who} tavsiya qilgan', + 'explore.detail.favoritedBy' => ({required Object who}) => '${who} tanlanganlarga qoʻshgan', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '${n} hali efirga chiqmagan', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => 'Tomoshabinlarning ${percent} tavsiya qilgan', + 'explore.detail.relatedTitles' => 'Bogʻliq nomlar', + 'explore.detail.background' => 'Orqa fon', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uz'))(n, one: '${n} ta natija', other: '${n} ta natija', ), 'liveTv.title' => 'Jonli TV', 'liveTv.guide' => 'Dasturlar jadvali', 'liveTv.noChannels' => 'Mavjud kanallar yoʻq', @@ -3225,8 +3889,6 @@ extension on TranslationsUz { 'watchTogether.codeMustBe5Chars' => 'Seans kodi 5 ta belgidan iborat boʻlishi kerak', 'watchTogether.joinInstructions' => 'Tashkilotchining seans kodini kiriting.', 'watchTogether.failedToCreate' => 'Seansni yaratib boʻlmadi', - _ => null, - } ?? switch (path) { 'watchTogether.failedToJoin' => 'Seansga qoʻshilib boʻlmadi', 'watchTogether.sessionCodeCopied' => 'Seans kodi nusxalandi', 'watchTogether.relayUnreachable' => 'Rele serveriga ulanib boʻlmadi.', @@ -3471,6 +4133,8 @@ extension on TranslationsUz { 'performanceOverlay.dvRpus' => 'DV RPU-lar', 'performanceOverlay.dvRpuAverage' => 'DV RPU Oʻrt.', 'performanceOverlay.dvSampleAverage' => 'DV Namuna Oʻrt.', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => 'Maks Luma', 'performanceOverlay.minLuma' => 'Min Luma', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3640,6 +4304,7 @@ extension on TranslationsUz { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => 'Plezy-ni ${service} xizmatida faollashtiring', 'services.deviceCode.body' => ({required Object url}) => '${url} manziliga oʻting va ushbu kodni kiriting:', 'services.deviceCode.openToActivate' => ({required Object service}) => 'Faollashtirish uchun ${service} xizmatini oching', @@ -3663,9 +4328,12 @@ extension on TranslationsUz { 'services.libraryFilter.modeHintWhitelist' => 'Faqat quyida tanlangan kutubxonalarni sinxronlash.', 'services.libraryFilter.libraries' => 'Kutubxonalar', 'services.libraryFilter.noLibraries' => 'Kutubxonalar yoʻq', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '${product} serverini qoʻshish', 'addServer.serverUrls' => 'Server URL-lari', 'addServer.serverUrlsHelper' => 'Vergul bilan ajratilgan bir nechta URL manziliga ruxsat beriladi.', 'addServer.findServer' => 'Serverni topish', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Mahalliy ${product} serverlari qidirilmoqda...', + 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Mahalliy ${product} serverlari', 'addServer.username' => 'Foydalanuvchi nomi', 'addServer.password' => 'Parol', 'addServer.signIn' => 'Kirish', @@ -3677,11 +4345,15 @@ extension on TranslationsUz { 'addServer.addPlexTitle' => 'Plex orqali kirish', 'addServer.pinExpired' => 'PIN kod vaqti tugadi.', 'addServer.failedToRegisterAccount' => ({required Object error}) => 'Hisobni roʻyxatdan oʻtkazishda xatolik: ${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '${product} server URL-ini kiriting', 'addServer.addConnectionTitle' => 'Ulanish qoʻshish', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} profiliga qoʻshish', 'addServer.signInWithPlexCard' => 'Plex orqali kirish', 'addServer.signInWithPlexCardSubtitle' => 'Ushbu qurilmani avtorizatsiya qiling.', 'addServer.signInWithPlexCardSubtitleScoped' => 'Plex hisobini avtorizatsiya qiling.', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '${product}ga ulanish', + 'addServer.connectToMediaBrowserCardSubtitle' => 'Server URL-ini, foydalanuvchi nomini va parolni kiriting.', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '${product} serveringizga kiring. ${name} profiliga bogʻlanadi.', 'addServer.borrowFromAnotherProfile' => 'Boshqa profildan olish', 'addServer.borrowFromAnotherProfileSubtitle' => 'Boshqa profilning ulanishidan qayta foydalaning.', _ => null, diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index e1d506bc..aaab90cb 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -67,6 +67,7 @@ class TranslationsZh extends Translations with BaseTranslations '正在等待身份验证…\n请在浏览器中登录。'; @override String get useBrowser => '使用浏览器'; @override String get or => '或'; + @override String connectToMediaBrowser({required Object product}) => '连接到 ${product}'; @override String get useQuickConnect => '使用 Quick Connect'; @override String get quickConnectInstructions => '在 Jellyfin 中打开 Quick Connect 并输入此代码。'; @override String get quickConnectWaiting => '等待批准…'; @@ -175,6 +177,7 @@ class Translations$common$zh extends Translations$common$en { @override String get fullscreen => '全屏'; @override String get exitFullscreen => '退出全屏'; @override String get pressBackAgainToExit => '再按一次返回键退出'; + @override late final Translations$common$ratingSource$zh ratingSource = Translations$common$ratingSource$zh.internal(_root); } // Path: screens @@ -238,6 +241,7 @@ class Translations$settings$zh extends Translations$settings$en { @override String get darkTheme => '深色'; @override String get oledTheme => 'OLED'; @override String get libraryDensity => '媒体库密度'; + @override String get displayScale => '界面缩放'; @override String get compact => '紧凑'; @override String get comfortable => '舒适'; @override String get tvCornerSpotlightBackdrop => '右上角聚焦背景图'; @@ -287,6 +291,11 @@ class Translations$settings$zh extends Translations$settings$en { @override String bufferSizeMB({required Object size}) => '${size}MB'; @override String get bufferSizeAuto => '自动(推荐)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '可用内存 ${heap}MB。${size}MB 缓冲可能影响播放。'; + @override String get playbackBuffer => '播放缓冲'; + @override String get playbackBufferAuto => '自动(推荐)'; + @override String get playbackBufferLarge => '大'; + @override String get playbackBufferExtraLarge => '特大'; + @override String get playbackBufferDescription => '针对不稳定的连接缓冲更多内容。也受缓冲大小限制。'; @override String get defaultQualityTitle => '默认画质'; @override String get musicQualityTitle => '音乐音质'; @override String get subtitleStyling => '字幕样式'; @@ -320,6 +329,9 @@ class Translations$settings$zh extends Translations$settings$en { @override String get debugLoggingDescription => '启用详细日志记录以便故障排除'; @override String get viewLogs => '查看日志'; @override String get viewLogsDescription => '查看应用日志'; + @override String get clearImageCache => '清除图片缓存'; + @override String get clearImageCacheDescription => '清除缓存的封面与缩略图。图片在重新下载前加载速度可能会变慢。'; + @override String get clearImageCacheSuccess => '图片缓存已成功清除'; @override String get resetSettings => '重置设置'; @override String get resetSettingsDescription => '恢复默认设置。此操作无法撤销。'; @override String get resetSettingsSuccess => '设置重置成功'; @@ -506,29 +518,118 @@ class Translations$fileInfo$zh extends Translations$fileInfo$en { // Translations @override String get title => '文件信息'; + @override String get overview => '简介'; @override String get video => '视频'; @override String get audio => '音频'; @override String get subtitles => '字幕'; + @override String get images => '内嵌图片'; + @override String get dataStreams => '数据流'; + @override String get lyrics => '歌词'; @override String get file => '文件'; + @override String get attachments => '附件'; + @override String get delivery => '传输方式'; + @override String versionCounter({required Object index, required Object count}) => '第 ${index} 个版本,共 ${count} 个'; + @override String fileCounter({required Object index, required Object count}) => '第 ${index} 个文件,共 ${count} 个'; + @override String get noStreams => '服务器报告此文件没有媒体流。'; + @override String get copyPath => '复制路径'; + @override String get pathCopied => '文件路径已复制'; @override String get codec => '编解码器'; + @override String get codecTag => '编码器标签'; @override String get resolution => '分辨率'; + @override String get codedResolution => '编码分辨率'; @override String get bitrate => '比特率'; @override String get frameRate => '帧率'; + @override String get rotation => '旋转'; + @override String get comment => '注释'; + @override String get audioDescription => '音频描述'; + @override String get headerCompression => '头部压缩'; + @override String get sidecarFile => '外挂文件'; + @override String get transportTimestamp => '传输时间戳'; + @override String get displayOffset => '显示偏移'; + @override String get previewFailureCode => '预览失败代码'; + @override String get previewRetries => '预览重试次数'; @override String get aspectRatio => '宽高比'; + @override String get pixelAspectRatio => '像素宽高比'; @override String get profile => '编码配置'; + @override String get level => '级别'; @override String get bitDepth => '位深度'; + @override String get pixelFormat => '像素格式'; @override String get colorSpace => '色彩空间'; @override String get colorRange => '色彩范围'; @override String get colorPrimaries => '色彩基色'; + @override String get colorTransfer => '色彩转换'; @override String get chromaSubsampling => '色度子采样'; + @override String get chromaLocation => '色度位置'; + @override String get scanType => '扫描类型'; + @override String get interlaced => '隔行扫描'; + @override String get anamorphic => '变形宽银幕'; + @override String get referenceFrames => '参考帧'; + @override String get dynamicRange => '动态范围'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision 级别'; + @override String get dolbyVisionVersion => 'Dolby Vision 版本'; + @override String get dolbyVisionLayers => 'Dolby Vision 图层'; + @override String get baseLayerCompatibility => '基础层兼容性'; + @override String get avcBitstream => 'AVC 比特流'; + @override String get nalLengthSize => 'NAL 长度'; + @override String get scalingMatrix => '自定义缩放矩阵'; + @override String get streamIdentifier => '流标识符'; + @override String get streamIndex => '流索引'; + @override String get streamId => '流 ID'; + @override String get language => '语言'; + @override String get languageCode => '语言代码'; + @override String get streamTitle => '轨道标题'; @override String get channels => '声道'; + @override String get sampleRate => '采样率'; + @override String get spatialAudio => '空间音频'; + @override String get textBased => '基于文本'; + @override String get subtitleFormat => '外挂文件格式'; + @override String get provider => '提供方'; + @override String get matchScore => '匹配分数'; + @override String get externalDelivery => '可单独提供'; + @override String get sidecarPath => '外挂文件路径'; + @override String get sourceStream => '复制来源'; + @override String get temporary => '临时'; + @override String get timeBase => '时间基准'; @override String get overallBitrate => '总比特率'; @override String get path => '路径'; + @override String get fileName => '文件名'; @override String get size => '大小'; + @override String get totalSize => '总大小'; @override String get container => '容器'; @override String get duration => '时长'; + @override String get previewThumbnails => '预览缩略图'; + @override String get previewIndex => '预览索引'; + @override String get packetLength => '数据包长度'; + @override String get filePresent => '文件存在'; + @override String get fileReadable => '服务器可读'; + @override String get streamPath => '流路径'; @override String get optimizedForStreaming => '已针对流式传输优化'; @override String get has64bitOffsets => '64 位偏移量'; + @override String get protocol => '协议'; + @override String get mediaType => '媒体类型'; + @override String get sourceKind => '来源类型'; + @override String get optimizedVersion => '优化版本'; + @override String get optimizationTarget => '优化目标'; + @override String get deletedAt => '已删除'; + @override String get remoteSource => '远程来源'; + @override String get infiniteStream => '无限流'; + @override String get directPlay => '直接播放'; + @override String get directStream => '直接串流'; + @override String get transcoding => '转码'; + @override String get etag => 'ETag'; + @override String get versionId => '版本 ID'; + @override String get fileId => '文件 ID'; + @override String get defaultAudioTrack => '默认音轨'; + @override String get defaultSubtitleTrack => '默认字幕轨道'; + @override String get subtitlesOff => '关闭'; + @override String get flagDefault => '默认'; + @override String get flagForced => '强制'; + @override String get flagSelected => '已选'; + @override String get flagExternal => '外部'; + @override String get flagHearingImpaired => '听障辅助'; + @override String get flagDub => '配音'; + @override String get flagOriginal => '原声'; } // Path: mediaMenu @@ -546,7 +647,32 @@ class Translations$mediaMenu$zh extends Translations$mediaMenu$en { @override String get shufflePlay => '随机播放'; @override String get shuffleNotAvailableOffline => '离线时无法随机播放'; @override String get fileInfo => '文件信息'; + @override String get deleteEpisodeFromServer => '从服务器删除单集'; + @override String get deleteSeasonFromServer => '从服务器删除季度'; + @override String get deleteShowFromServer => '从服务器删除剧集'; + @override String get deleteMovieFromServer => '从服务器删除电影'; + @override String get deleteEpisodeTitle => '删除这个单集?'; + @override String get deleteSeasonTitle => '删除这一季度?'; + @override String get deleteShowTitle => '删除这部剧集?'; + @override String get deleteMovieTitle => '删除这部电影?'; + @override String get deleteEpisodeConfirm => '删除单集'; + @override String get deleteSeasonConfirm => '删除季度'; + @override String get deleteShowConfirm => '删除剧集'; + @override String get deleteMovieConfirm => '删除电影'; + @override String get deleteAnyway => '仍然删除'; + @override String confirmDeleteTarget({required Object title}) => '从你的服务器永久删除 ${title}?'; @override String get deleteMultipleWarning => '这包括所有剧集及其文件。'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '这将删除其中全部 ${n} 集以及它们的文件。', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '此项目存储在 ${n} 个文件中,所有这些文件都会被删除。', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '另外 ${n} 集存储在同一个文件中,也会一并删除:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy 无法确认此操作会删除哪些文件,因此删除范围可能超出上面提到的项目。请取消后重试,或仍然删除。'; + @override String get deleteScopeUnverifiedNoFileInfo => '你的服务器没有提供此项目的文件详情,因此 Plezy 无法确认此操作会删除哪些文件。删除范围可能超出上面提到的项目。'; @override String get mediaDeletedSuccessfully => '媒体项已成功删除'; @override String get mediaFailedToDelete => '删除媒体项失败'; @override String get rate => '评分'; @@ -657,6 +783,9 @@ class Translations$videoControls$zh extends Translations$videoControls$en { @override String get playNext => '播放下一集'; @override String get playButton => '播放'; @override String get pauseButton => '暂停'; + @override String get playbackPaused => '已暂停'; + @override String get playbackResumed => '正在播放'; + @override String get loadingVideo => '正在加载视频'; @override String get showPlaybackControls => '显示播放控制项'; @override String get hidePlaybackControls => '隐藏播放控制项'; @override String seekBackwardButton({required Object seconds}) => '快退 ${seconds} 秒'; @@ -725,6 +854,7 @@ class Translations$messages$zh extends Translations$messages$en { ); @override String get removedFromContinueWatching => '已从继续观看中移除'; @override String errorLoading({required Object error}) => '出错:${error}'; + @override String get searchPartialResults => '部分媒体服务器无法搜索。正在显示可用的结果。'; @override String get streamInterrupted => '视频流已中断。按播放键或拖动进度条重试。'; @override String get liveStreamInterrupted => '直播流已中断。按播放键重试。'; @override String get fileInfoNotAvailable => '文件信息不可用'; @@ -763,6 +893,8 @@ class Translations$messages$zh extends Translations$messages$en { @override String get switchingToCompatiblePlayer => '正在切换到兼容的播放器…'; @override String get serverLimitTitle => '播放失败'; @override String get serverLimitBody => '服务器错误(HTTP 500)。此次会话可能因带宽或转码限制而被拒绝。请联系服务器所有者调整限制。'; + @override String get mediaUnreadableTitle => '文件不可用'; + @override String get mediaUnreadableBody => '服务器找到了此项目,但无法读取其文件(HTTP 404)。文件可能已被移动、删除,或其存储已离线。请联系服务器管理员检查文件并重新扫描媒体库。'; @override String get logsUploaded => '日志已上传'; @override String get logsUploadFailed => '上传日志失败'; @override String get logId => '日志 ID'; @@ -916,6 +1048,8 @@ class Translations$connections$zh extends Translations$connections$en { @override String sessionExpiredOne({required Object name}) => '${name} 的会话已过期'; @override String sessionExpiredMany({required Object count}) => '${count} 个服务器的会话已过期'; @override String get signInAgain => '重新登录'; + @override String editMediaBrowserTitle({required Object product}) => '编辑 ${product} 连接'; + @override String editMediaBrowserIntro({required Object serverName}) => '为 ${serverName} 添加或移除 URL。Plezy 会使用延迟最低且可访问的 URL。'; } // Path: discover @@ -959,6 +1093,7 @@ class Translations$errors$zh extends Translations$errors$en { // Translations @override String searchFailed({required Object error}) => '搜索失败:${error}'; + @override String get searchUnavailable => '搜索无法连接任何媒体服务器。'; @override String connectionTimeout({required Object context}) => '加载 ${context} 时连接超时'; @override String get connectionFailed => '无法连接到媒体服务器'; @override String unableToLoad({required Object context}) => '无法加载${context}。请重试。'; @@ -1076,6 +1211,45 @@ class Translations$logs$zh extends Translations$logs$en { @override String get uploadLogs => '上传日志'; } +// Path: startup +class Translations$startup$zh extends Translations$startup$en { + Translations$startup$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy 无法启动'; + @override String get failedBody => '启动过程中出现问题。以下详情指出了失败的原因。'; + @override String get failedBodyRepairable => 'Plezy 的已保存设置文件已损坏,必须先重建才能启动。重试没有用——请选择“修复存储”。'; + @override String get phaseLabel => '步骤'; + @override String get showDetails => '显示详情'; + @override String get hideDetails => '隐藏详情'; + @override String get copyDetails => '复制详情'; + @override String get detailsCopied => '详情已复制到剪贴板'; + @override String get uploadDetails => '上传详情'; + @override String get repairStorage => '修复存储'; + @override String get repairTitle => '修复已存储的数据?'; + @override String get repairBodyCommon => 'Plezy 的设置文件已损坏且无法读取。修复会将所有设置重置为默认值。'; + @override String get repairBodyOneCredential => '有一项已保存的登录信息已损坏且无法读取。修复只会移除这一项,其他设置保持不变。'; + @override String get repairBodySignInsKept => '你的服务器和个人资料应保持登录状态。'; + @override String get repairBodySignInsLost => '保护已保存登录信息的密钥无法从此文件中恢复,因此你需要重新登录每个服务器和个人资料。媒体服务器上的内容不受影响。'; + @override String get repairBodySessionsUncertain => '追踪服务(MAL、AniList、Simkl、Trakt)和 Seerr 是分开存储的,可能保留也可能无法保留。Plezy 会明确告诉你保留了哪些。'; + @override String get repairConfirm => '修复'; + @override String get repairSucceeded => '存储已修复'; + @override String get repairNeedsRestart => '存储已修复 — 需要重启'; + @override String get restartRequiredBody => '你的数据已修复,但 Plezy 需要重新启动后才能使用。请关闭 Plezy 并重新打开。'; + @override String get quitPlezy => '退出 Plezy'; + @override String get repairFailed => '修复失败'; + @override String get repairKeptSignIns => '你的服务器和个人资料仍然保持登录状态。'; + @override String get repairLostSignIns => '保护已保存登录信息的密钥无法恢复。你需要重新登录每个服务器和个人资料。'; + @override String get repairLostSessions => '至少有一个追踪服务或 Seerr 连接已丢失,需要重新连接。'; + @override String get backupTitle => '已保留损坏文件的副本'; + @override String get backupWarning => '其中包含你的登录凭据。请勿上传或分享。'; + @override String get deleteBackup => '删除副本'; + @override String get backupDeleted => '副本已删除。'; + @override String get previousFailureTitle => 'Plezy 上次启动失败'; +} + // Path: licenses class Translations$licenses$zh extends Translations$licenses$en { Translations$licenses$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); @@ -1130,6 +1304,19 @@ class Translations$explore$zh extends Translations$explore$en { @override String searchEmpty({required Object query}) => '没有“${query}”的结果'; @override String searchPrompt({required Object source}) => '在 ${source} 上搜索电影和剧集。'; @override String get searchFailed => '搜索失败。请检查网络连接后重试。'; + @override late final Translations$explore$badge$zh badge = Translations$explore$badge$zh.internal(_root); + @override late final Translations$explore$stats$zh stats = Translations$explore$stats$zh.internal(_root); + @override late final Translations$explore$season$zh season = Translations$explore$season$zh.internal(_root); + @override late final Translations$explore$format$zh format = Translations$explore$format$zh.internal(_root); + @override late final Translations$explore$sourceMaterial$zh sourceMaterial = Translations$explore$sourceMaterial$zh.internal(_root); + @override late final Translations$explore$creditRole$zh creditRole = Translations$explore$creditRole$zh.internal(_root); + @override late final Translations$explore$relation$zh relation = Translations$explore$relation$zh.internal(_root); + @override String broadcast({required Object day, required Object time}) => '每周${day} ${time}播出'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '每周${day} ${time} ${timezone}播出'; + @override late final Translations$explore$detail$zh detail = Translations$explore$detail$zh.internal(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '${n} 条结果', + ); } // Path: liveTv @@ -1436,9 +1623,15 @@ class Translations$downloads$zh extends Translations$downloads$en { @override String get editSyncRule => '编辑同步规则'; @override String get removeSyncRule => '删除同步规则'; @override String removeSyncRuleConfirm({required Object title}) => '停止同步“${title}”?已下载的剧集将被保留。'; + @override String removeListSyncRuleConfirm({required Object title}) => '停止同步“${title}”?'; + @override String get deleteSyncRuleDownloads => '同时删除相关下载'; + @override String get deleteSyncRuleDownloadsDescription => '被其他同步规则或个人资料使用的下载将保留。'; @override String syncRuleCreated({required Object count}) => '同步规则已创建 — 保留 ${count} 集未观看内容'; @override String get syncRuleUpdated => '同步规则已更新'; @override String get syncRuleRemoved => '同步规则已删除'; + @override String get syncRuleAndDownloadsRemoved => '同步规则及相关下载已删除'; + @override String get syncRuleCleanupBusy => '同步规则正在更新中,请稍后再试。'; + @override String get syncRuleCleanupUnavailable => '无法安全识别相关下载。请重新连接服务器后再试,或在不删除下载的情况下移除规则。'; @override String syncedNewEpisodes({required Object title, required Object count}) => '已为 ${title} 同步 ${count} 个新剧集'; @override String get activeSyncRules => '同步规则'; @override String get noSyncRules => '没有同步规则'; @@ -1796,9 +1989,12 @@ class Translations$addServer$zh extends Translations$addServer$en { final TranslationsZh _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '添加 ${product} 服务器'; @override String get serverUrls => '服务器 URL'; @override String get serverUrlsHelper => '可输入多个 URL,并用逗号分隔。'; @override String get findServer => '查找服务器'; + @override String searchingLocalMediaBrowserServers({required Object product}) => '正在查找本地 ${product} 服务器…'; + @override String localMediaBrowserServers({required Object product}) => '本地 ${product} 服务器'; @override String get username => '用户名'; @override String get password => '密码'; @override String get signIn => '登录'; @@ -1810,15 +2006,39 @@ class Translations$addServer$zh extends Translations$addServer$en { @override String get addPlexTitle => '使用 Plex 登录'; @override String get pinExpired => 'PIN 在登录前已过期。请重试。'; @override String failedToRegisterAccount({required Object error}) => '注册账户失败:${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '请输入你的 ${product} 服务器 URL'; @override String get addConnectionTitle => '添加连接'; @override String addConnectionTitleScoped({required Object name}) => '添加到 ${name}'; @override String get signInWithPlexCard => '使用 Plex 登录'; @override String get signInWithPlexCardSubtitle => '授权此设备。共享服务器会被添加。'; @override String get signInWithPlexCardSubtitleScoped => '授权一个 Plex 账户。Plex Home 用户将成为 Plezy 用户资料。'; + @override String connectToMediaBrowserCard({required Object product}) => '连接到 ${product}'; + @override String get connectToMediaBrowserCardSubtitle => '输入你的服务器 URL、用户名和密码。'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '登录你的 ${product} 服务器。将绑定到 ${name}。'; @override String get borrowFromAnotherProfile => '使用其他用户资料的连接'; @override String get borrowFromAnotherProfileSubtitle => '复用另一个用户资料的连接。受 PIN 保护的用户资料需要输入 PIN。'; } +// Path: common.ratingSource +class Translations$common$ratingSource$zh extends Translations$common$ratingSource$en { + Translations$common$ratingSource$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get critic => '影评人'; + @override String get audience => '观众'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes 影评人'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes 观众'; +} + // Path: hotkeys.actions class Translations$hotkeys$actions$zh extends Translations$hotkeys$actions$en { Translations$hotkeys$actions$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); @@ -1982,6 +2202,184 @@ class Translations$explore$status$zh extends Translations$explore$status$en { @override String get upcoming => '即将上线'; } +// Path: explore.badge +class Translations$explore$badge$zh extends Translations$explore$badge$en { + Translations$explore$badge$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '热门榜第 #${n} 名'; + @override String rankAiring({required Object n}) => '在播榜第 #${n} 名'; + @override String rankRated({required Object n}) => '评分榜第 #${n} 名'; + @override String rankFavorited({required Object n}) => '收藏榜第 #${n} 名'; + @override String rankTrending({required Object n}) => '趋势榜第 #${n} 名'; + @override String rankSeasonal({required Object season, required Object n}) => '${season}榜第 #${n} 名'; + @override String watchingNow({required Object n}) => '${n} 人正在观看'; + @override String get available => '可观看'; + @override String get partiallyAvailable => '部分可观看'; + @override String get availableIn4k => '提供 4K'; + @override String get requested => '已请求'; + @override String get pendingApproval => '待批准'; + @override String get processing => '处理中'; + @override String get declined => '已拒绝'; + @override String get requestFailed => '请求失败'; + @override String get requested4k => '已请求 4K'; + @override String seasonsAvailable({required Object available, required Object total}) => '已有 ${available}/${total} 季'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => '第 ${episode} 集将在 ${duration} 后播出'; + @override String nextAiringIn({required Object duration}) => '下一集将在 ${duration} 后播出'; + @override String episodesShort({required Object n}) => '${n} 集'; + @override String minutesPerEpisode({required Object n}) => '${n} 分钟/集'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class Translations$explore$stats$zh extends Translations$explore$stats$en { + Translations$explore$stats$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} 人已标记'; + @override String viewersDay({required Object n}) => '今日 ${n} 人观看'; + @override String viewersWeek({required Object n}) => '本周 ${n} 人观看'; + @override String viewersMonth({required Object n}) => '本月 ${n} 人观看'; + @override String viewersYear({required Object n}) => '今年 ${n} 人观看'; + @override String viewersAllTime({required Object n}) => '累计 ${n} 人观看'; + @override String planning({required Object n}) => '${n} 人想看'; + @override String favorited({required Object n}) => '${n} 人收藏'; + @override String dropRate({required Object percent}) => '${percent} 弃番'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '${n} 条评论', + ); + @override String votes({required Object n}) => '${n} 票'; + @override String watching({required Object n}) => '${n} 人正在观看'; + @override String completed({required Object n}) => '${n} 人已看完'; + @override String onHold({required Object n}) => '${n} 人搁置'; + @override String dropped({required Object n}) => '${n} 人弃番'; +} + +// Path: explore.season +class Translations$explore$season$zh extends Translations$explore$season$en { + Translations$explore$season$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get winter => '冬季'; + @override String get spring => '春季'; + @override String get summer => '夏季'; + @override String get fall => '秋季'; + @override String withYear({required Object year, required Object season}) => '${year}年${season}'; +} + +// Path: explore.format +class Translations$explore$format$zh extends Translations$explore$format$en { + Translations$explore$format$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV 短片'; + @override String get movie => '电影'; + @override String get special => '特别篇'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => '音乐'; + @override String get other => '其他'; +} + +// Path: explore.sourceMaterial +class Translations$explore$sourceMaterial$zh extends Translations$explore$sourceMaterial$en { + Translations$explore$sourceMaterial$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get original => '原创'; + @override String get manga => '漫画'; + @override String get lightNovel => '轻小说'; + @override String get novel => '小说'; + @override String get visualNovel => '视觉小说'; + @override String get game => '游戏'; + @override String get webComic => '网络漫画'; + @override String get musicRelease => '音乐'; + @override String get otherMedia => '其他'; +} + +// Path: explore.creditRole +class Translations$explore$creditRole$zh extends Translations$explore$creditRole$en { + Translations$explore$creditRole$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get director => '导演'; + @override String get writer => '编剧'; + @override String get producer => '制片人'; + @override String get creator => '创作者'; + @override String get composer => '作曲'; +} + +// Path: explore.relation +class Translations$explore$relation$zh extends Translations$explore$relation$en { + Translations$explore$relation$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get prequel => '前传'; + @override String get sequel => '续集'; + @override String get sideStory => '番外篇'; + @override String get spinOff => '衍生作品'; + @override String get alternativeVersion => '另一版本'; + @override String get summary => '总集篇'; + @override String get parentStory => '原作'; + @override String get adaptation => '改编'; + @override String get other => '相关'; +} + +// Path: explore.detail +class Translations$explore$detail$zh extends Translations$explore$detail$en { + Translations$explore$detail$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get originalTitle => '原名'; + @override String get alsoKnownAs => '又名'; + @override String get studios => '制作公司'; + @override String get country => '国家/地区'; + @override String get language => '语言'; + @override String get released => '上映日期'; + @override String get physicalRelease => '光盘发售'; + @override String get ended => '完结日期'; + @override String addedOn({required Object date}) => '添加于 ${date}'; + @override String get yourRating => '你的评分'; + @override String get budget => '预算'; + @override String get revenue => '票房'; + @override String get contentAdvisory => '年龄分级'; + @override String get tags => '标签'; + @override String get revealSpoilerTags => '显示剧透标签'; + @override String get links => '链接'; + @override String get watchOn => '观看平台'; + @override String get watchTrailer => '观看预告片'; + @override String openOn({required Object site}) => '在 ${site} 打开'; + @override String get crew => '演职人员'; + @override String get ratings => '评分'; + @override String get schedule => '播出时间'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '由 ${n} 位用户推荐', + ); + @override String recommendedBy({required Object who}) => '由 ${who} 推荐'; + @override String favoritedBy({required Object who}) => '由 ${who} 收藏'; + @override String unairedEpisodes({required Object n}) => '还有 ${n} 集未播出'; + @override String recommendedByPercent({required Object percent}) => '${percent} 的观众推荐'; + @override String get relatedTitles => '相关作品'; + @override String get background => '背景'; +} + // Path: downloads.backgroundWarning class Translations$downloads$backgroundWarning$zh extends Translations$downloads$backgroundWarning$en { Translations$downloads$backgroundWarning$zh.internal(TranslationsZh root) : this._root = root, super.internal(root); @@ -2125,6 +2523,7 @@ class Translations$services$names$zh extends Translations$services$names$en { @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2194,6 +2593,7 @@ extension on TranslationsZh { 'auth.waitingForAuth' => '正在等待身份验证…\n请在浏览器中登录。', 'auth.useBrowser' => '使用浏览器', 'auth.or' => '或', + 'auth.connectToMediaBrowser' => ({required Object product}) => '连接到 ${product}', 'auth.useQuickConnect' => '使用 Quick Connect', 'auth.quickConnectInstructions' => '在 Jellyfin 中打开 Quick Connect 并输入此代码。', 'auth.quickConnectWaiting' => '等待批准…', @@ -2245,6 +2645,17 @@ extension on TranslationsZh { 'common.fullscreen' => '全屏', 'common.exitFullscreen' => '退出全屏', 'common.pressBackAgainToExit' => '再按一次返回键退出', + 'common.ratingSource.critic' => '影评人', + 'common.ratingSource.audience' => '观众', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes 影评人', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes 观众', 'screens.licenses' => '许可证', 'screens.switchProfile' => '切换用户', 'screens.subtitleStyling' => '字幕样式', @@ -2281,6 +2692,7 @@ extension on TranslationsZh { 'settings.darkTheme' => '深色', 'settings.oledTheme' => 'OLED', 'settings.libraryDensity' => '媒体库密度', + 'settings.displayScale' => '界面缩放', 'settings.compact' => '紧凑', 'settings.comfortable' => '舒适', 'settings.tvCornerSpotlightBackdrop' => '右上角聚焦背景图', @@ -2330,6 +2742,11 @@ extension on TranslationsZh { 'settings.bufferSizeMB' => ({required Object size}) => '${size}MB', 'settings.bufferSizeAuto' => '自动(推荐)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '可用内存 ${heap}MB。${size}MB 缓冲可能影响播放。', + 'settings.playbackBuffer' => '播放缓冲', + 'settings.playbackBufferAuto' => '自动(推荐)', + 'settings.playbackBufferLarge' => '大', + 'settings.playbackBufferExtraLarge' => '特大', + 'settings.playbackBufferDescription' => '针对不稳定的连接缓冲更多内容。也受缓冲大小限制。', 'settings.defaultQualityTitle' => '默认画质', 'settings.musicQualityTitle' => '音乐音质', 'settings.subtitleStyling' => '字幕样式', @@ -2363,6 +2780,9 @@ extension on TranslationsZh { 'settings.debugLoggingDescription' => '启用详细日志记录以便故障排除', 'settings.viewLogs' => '查看日志', 'settings.viewLogsDescription' => '查看应用日志', + 'settings.clearImageCache' => '清除图片缓存', + 'settings.clearImageCacheDescription' => '清除缓存的封面与缩略图。图片在重新下载前加载速度可能会变慢。', + 'settings.clearImageCacheSuccess' => '图片缓存已成功清除', 'settings.resetSettings' => '重置设置', 'settings.resetSettingsDescription' => '恢复默认设置。此操作无法撤销。', 'settings.resetSettingsSuccess' => '设置重置成功', @@ -2546,29 +2966,118 @@ extension on TranslationsZh { 'hotkeys.actions.skipMarker' => '跳过片头/片尾', 'hotkeys.actions.screenshot' => '截图', 'fileInfo.title' => '文件信息', + 'fileInfo.overview' => '简介', 'fileInfo.video' => '视频', 'fileInfo.audio' => '音频', 'fileInfo.subtitles' => '字幕', + 'fileInfo.images' => '内嵌图片', + 'fileInfo.dataStreams' => '数据流', + 'fileInfo.lyrics' => '歌词', 'fileInfo.file' => '文件', + 'fileInfo.attachments' => '附件', + 'fileInfo.delivery' => '传输方式', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => '第 ${index} 个版本,共 ${count} 个', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => '第 ${index} 个文件,共 ${count} 个', + 'fileInfo.noStreams' => '服务器报告此文件没有媒体流。', + 'fileInfo.copyPath' => '复制路径', + 'fileInfo.pathCopied' => '文件路径已复制', 'fileInfo.codec' => '编解码器', + 'fileInfo.codecTag' => '编码器标签', 'fileInfo.resolution' => '分辨率', + 'fileInfo.codedResolution' => '编码分辨率', 'fileInfo.bitrate' => '比特率', 'fileInfo.frameRate' => '帧率', + 'fileInfo.rotation' => '旋转', + 'fileInfo.comment' => '注释', + 'fileInfo.audioDescription' => '音频描述', + 'fileInfo.headerCompression' => '头部压缩', + 'fileInfo.sidecarFile' => '外挂文件', + 'fileInfo.transportTimestamp' => '传输时间戳', + 'fileInfo.displayOffset' => '显示偏移', + 'fileInfo.previewFailureCode' => '预览失败代码', + 'fileInfo.previewRetries' => '预览重试次数', 'fileInfo.aspectRatio' => '宽高比', + 'fileInfo.pixelAspectRatio' => '像素宽高比', 'fileInfo.profile' => '编码配置', + 'fileInfo.level' => '级别', 'fileInfo.bitDepth' => '位深度', + 'fileInfo.pixelFormat' => '像素格式', 'fileInfo.colorSpace' => '色彩空间', 'fileInfo.colorRange' => '色彩范围', 'fileInfo.colorPrimaries' => '色彩基色', + 'fileInfo.colorTransfer' => '色彩转换', 'fileInfo.chromaSubsampling' => '色度子采样', + 'fileInfo.chromaLocation' => '色度位置', + 'fileInfo.scanType' => '扫描类型', + 'fileInfo.interlaced' => '隔行扫描', + 'fileInfo.anamorphic' => '变形宽银幕', + 'fileInfo.referenceFrames' => '参考帧', + 'fileInfo.dynamicRange' => '动态范围', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision 级别', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision 版本', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision 图层', + 'fileInfo.baseLayerCompatibility' => '基础层兼容性', + 'fileInfo.avcBitstream' => 'AVC 比特流', + 'fileInfo.nalLengthSize' => 'NAL 长度', + 'fileInfo.scalingMatrix' => '自定义缩放矩阵', + 'fileInfo.streamIdentifier' => '流标识符', + 'fileInfo.streamIndex' => '流索引', + 'fileInfo.streamId' => '流 ID', + 'fileInfo.language' => '语言', + 'fileInfo.languageCode' => '语言代码', + 'fileInfo.streamTitle' => '轨道标题', 'fileInfo.channels' => '声道', + 'fileInfo.sampleRate' => '采样率', + 'fileInfo.spatialAudio' => '空间音频', + 'fileInfo.textBased' => '基于文本', + 'fileInfo.subtitleFormat' => '外挂文件格式', + 'fileInfo.provider' => '提供方', + 'fileInfo.matchScore' => '匹配分数', + 'fileInfo.externalDelivery' => '可单独提供', + 'fileInfo.sidecarPath' => '外挂文件路径', + 'fileInfo.sourceStream' => '复制来源', + 'fileInfo.temporary' => '临时', + 'fileInfo.timeBase' => '时间基准', 'fileInfo.overallBitrate' => '总比特率', 'fileInfo.path' => '路径', + 'fileInfo.fileName' => '文件名', 'fileInfo.size' => '大小', + 'fileInfo.totalSize' => '总大小', 'fileInfo.container' => '容器', 'fileInfo.duration' => '时长', + 'fileInfo.previewThumbnails' => '预览缩略图', + 'fileInfo.previewIndex' => '预览索引', + 'fileInfo.packetLength' => '数据包长度', + 'fileInfo.filePresent' => '文件存在', + 'fileInfo.fileReadable' => '服务器可读', + 'fileInfo.streamPath' => '流路径', 'fileInfo.optimizedForStreaming' => '已针对流式传输优化', 'fileInfo.has64bitOffsets' => '64 位偏移量', + 'fileInfo.protocol' => '协议', + 'fileInfo.mediaType' => '媒体类型', + 'fileInfo.sourceKind' => '来源类型', + 'fileInfo.optimizedVersion' => '优化版本', + 'fileInfo.optimizationTarget' => '优化目标', + 'fileInfo.deletedAt' => '已删除', + 'fileInfo.remoteSource' => '远程来源', + 'fileInfo.infiniteStream' => '无限流', + 'fileInfo.directPlay' => '直接播放', + 'fileInfo.directStream' => '直接串流', + 'fileInfo.transcoding' => '转码', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => '版本 ID', + 'fileInfo.fileId' => '文件 ID', + 'fileInfo.defaultAudioTrack' => '默认音轨', + 'fileInfo.defaultSubtitleTrack' => '默认字幕轨道', + 'fileInfo.subtitlesOff' => '关闭', + 'fileInfo.flagDefault' => '默认', + 'fileInfo.flagForced' => '强制', + 'fileInfo.flagSelected' => '已选', + 'fileInfo.flagExternal' => '外部', + 'fileInfo.flagHearingImpaired' => '听障辅助', + 'fileInfo.flagDub' => '配音', + 'fileInfo.flagOriginal' => '原声', 'mediaMenu.markAsWatched' => '标记为已观看', 'mediaMenu.markAsUnwatched' => '标记为未观看', 'mediaMenu.removeFromContinueWatching' => '从继续观看中移除', @@ -2577,7 +3086,28 @@ extension on TranslationsZh { 'mediaMenu.shufflePlay' => '随机播放', 'mediaMenu.shuffleNotAvailableOffline' => '离线时无法随机播放', 'mediaMenu.fileInfo' => '文件信息', + 'mediaMenu.deleteEpisodeFromServer' => '从服务器删除单集', + 'mediaMenu.deleteSeasonFromServer' => '从服务器删除季度', + 'mediaMenu.deleteShowFromServer' => '从服务器删除剧集', + 'mediaMenu.deleteMovieFromServer' => '从服务器删除电影', + 'mediaMenu.deleteEpisodeTitle' => '删除这个单集?', + 'mediaMenu.deleteSeasonTitle' => '删除这一季度?', + 'mediaMenu.deleteShowTitle' => '删除这部剧集?', + 'mediaMenu.deleteMovieTitle' => '删除这部电影?', + 'mediaMenu.deleteEpisodeConfirm' => '删除单集', + 'mediaMenu.deleteSeasonConfirm' => '删除季度', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => '删除剧集', + 'mediaMenu.deleteMovieConfirm' => '删除电影', + 'mediaMenu.deleteAnyway' => '仍然删除', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '从你的服务器永久删除 ${title}?', 'mediaMenu.deleteMultipleWarning' => '这包括所有剧集及其文件。', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '这将删除其中全部 ${n} 集以及它们的文件。', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '此项目存储在 ${n} 个文件中,所有这些文件都会被删除。', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '另外 ${n} 集存储在同一个文件中,也会一并删除:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy 无法确认此操作会删除哪些文件,因此删除范围可能超出上面提到的项目。请取消后重试,或仍然删除。', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => '你的服务器没有提供此项目的文件详情,因此 Plezy 无法确认此操作会删除哪些文件。删除范围可能超出上面提到的项目。', 'mediaMenu.mediaDeletedSuccessfully' => '媒体项已成功删除', 'mediaMenu.mediaFailedToDelete' => '删除媒体项失败', 'mediaMenu.rate' => '评分', @@ -2643,6 +3173,9 @@ extension on TranslationsZh { 'videoControls.playNext' => '播放下一集', 'videoControls.playButton' => '播放', 'videoControls.pauseButton' => '暂停', + 'videoControls.playbackPaused' => '已暂停', + 'videoControls.playbackResumed' => '正在播放', + 'videoControls.loadingVideo' => '正在加载视频', 'videoControls.showPlaybackControls' => '显示播放控制项', 'videoControls.hidePlaybackControls' => '隐藏播放控制项', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '快退 ${seconds} 秒', @@ -2697,8 +3230,6 @@ extension on TranslationsZh { 'videoControls.subtitleDownloaded' => '字幕已下载', 'videoControls.subtitleDownloadedNotApplied' => '字幕已下载,但无法选择', 'videoControls.subtitleDownloadFailed' => '字幕下载失败', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => '搜索语言…', 'messages.markedAsWatched' => '已标记为已观看', 'messages.markedAsUnwatched' => '已标记为未观看', @@ -2708,6 +3239,7 @@ extension on TranslationsZh { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '已自动移除 ${n} 个看过的下载', ), 'messages.removedFromContinueWatching' => '已从继续观看中移除', 'messages.errorLoading' => ({required Object error}) => '出错:${error}', + 'messages.searchPartialResults' => '部分媒体服务器无法搜索。正在显示可用的结果。', 'messages.streamInterrupted' => '视频流已中断。按播放键或拖动进度条重试。', 'messages.liveStreamInterrupted' => '直播流已中断。按播放键重试。', 'messages.fileInfoNotAvailable' => '文件信息不可用', @@ -2746,6 +3278,8 @@ extension on TranslationsZh { 'messages.switchingToCompatiblePlayer' => '正在切换到兼容的播放器…', 'messages.serverLimitTitle' => '播放失败', 'messages.serverLimitBody' => '服务器错误(HTTP 500)。此次会话可能因带宽或转码限制而被拒绝。请联系服务器所有者调整限制。', + 'messages.mediaUnreadableTitle' => '文件不可用', + 'messages.mediaUnreadableBody' => '服务器找到了此项目,但无法读取其文件(HTTP 404)。文件可能已被移动、删除,或其存储已离线。请联系服务器管理员检查文件并重新扫描媒体库。', 'messages.logsUploaded' => '日志已上传', 'messages.logsUploadFailed' => '上传日志失败', 'messages.logId' => '日志 ID', @@ -2854,6 +3388,8 @@ extension on TranslationsZh { 'connections.sessionExpiredOne' => ({required Object name}) => '${name} 的会话已过期', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} 个服务器的会话已过期', 'connections.signInAgain' => '重新登录', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '编辑 ${product} 连接', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '为 ${serverName} 添加或移除 URL。Plezy 会使用延迟最低且可访问的 URL。', 'discover.title' => '发现', 'discover.noContentAvailable' => '没有可用内容', 'discover.addMediaToLibraries' => '请向你的媒体库添加一些媒体', @@ -2879,6 +3415,7 @@ extension on TranslationsZh { 'discover.minutesLeft' => ({required Object minutes}) => '剩余 ${minutes} 分钟', 'discover.moreLikeThis' => '更多类似内容', 'errors.searchFailed' => ({required Object error}) => '搜索失败:${error}', + 'errors.searchUnavailable' => '搜索无法连接任何媒体服务器。', 'errors.connectionTimeout' => ({required Object context}) => '加载 ${context} 时连接超时', 'errors.connectionFailed' => '无法连接到媒体服务器', 'errors.unableToLoad' => ({required Object context}) => '无法加载${context}。请重试。', @@ -2986,6 +3523,36 @@ extension on TranslationsZh { 'logs.clearLogs' => '清除日志', 'logs.copyLogs' => '复制日志', 'logs.uploadLogs' => '上传日志', + 'startup.failedTitle' => 'Plezy 无法启动', + 'startup.failedBody' => '启动过程中出现问题。以下详情指出了失败的原因。', + 'startup.failedBodyRepairable' => 'Plezy 的已保存设置文件已损坏,必须先重建才能启动。重试没有用——请选择“修复存储”。', + 'startup.phaseLabel' => '步骤', + 'startup.showDetails' => '显示详情', + 'startup.hideDetails' => '隐藏详情', + 'startup.copyDetails' => '复制详情', + 'startup.detailsCopied' => '详情已复制到剪贴板', + 'startup.uploadDetails' => '上传详情', + 'startup.repairStorage' => '修复存储', + 'startup.repairTitle' => '修复已存储的数据?', + 'startup.repairBodyCommon' => 'Plezy 的设置文件已损坏且无法读取。修复会将所有设置重置为默认值。', + 'startup.repairBodyOneCredential' => '有一项已保存的登录信息已损坏且无法读取。修复只会移除这一项,其他设置保持不变。', + 'startup.repairBodySignInsKept' => '你的服务器和个人资料应保持登录状态。', + 'startup.repairBodySignInsLost' => '保护已保存登录信息的密钥无法从此文件中恢复,因此你需要重新登录每个服务器和个人资料。媒体服务器上的内容不受影响。', + 'startup.repairBodySessionsUncertain' => '追踪服务(MAL、AniList、Simkl、Trakt)和 Seerr 是分开存储的,可能保留也可能无法保留。Plezy 会明确告诉你保留了哪些。', + 'startup.repairConfirm' => '修复', + 'startup.repairSucceeded' => '存储已修复', + 'startup.repairNeedsRestart' => '存储已修复 — 需要重启', + 'startup.restartRequiredBody' => '你的数据已修复,但 Plezy 需要重新启动后才能使用。请关闭 Plezy 并重新打开。', + 'startup.quitPlezy' => '退出 Plezy', + 'startup.repairFailed' => '修复失败', + 'startup.repairKeptSignIns' => '你的服务器和个人资料仍然保持登录状态。', + 'startup.repairLostSignIns' => '保护已保存登录信息的密钥无法恢复。你需要重新登录每个服务器和个人资料。', + 'startup.repairLostSessions' => '至少有一个追踪服务或 Seerr 连接已丢失,需要重新连接。', + 'startup.backupTitle' => '已保留损坏文件的副本', + 'startup.backupWarning' => '其中包含你的登录凭据。请勿上传或分享。', + 'startup.deleteBackup' => '删除副本', + 'startup.backupDeleted' => '副本已删除。', + 'startup.previousFailureTitle' => 'Plezy 上次启动失败', 'licenses.relatedPackages' => '相关软件包', 'licenses.license' => '许可证', 'licenses.licenseNumber' => ({required Object number}) => '许可证 ${number}', @@ -3029,6 +3596,113 @@ extension on TranslationsZh { 'explore.searchEmpty' => ({required Object query}) => '没有“${query}”的结果', 'explore.searchPrompt' => ({required Object source}) => '在 ${source} 上搜索电影和剧集。', 'explore.searchFailed' => '搜索失败。请检查网络连接后重试。', + 'explore.badge.rankPopular' => ({required Object n}) => '热门榜第 #${n} 名', + 'explore.badge.rankAiring' => ({required Object n}) => '在播榜第 #${n} 名', + 'explore.badge.rankRated' => ({required Object n}) => '评分榜第 #${n} 名', + 'explore.badge.rankFavorited' => ({required Object n}) => '收藏榜第 #${n} 名', + 'explore.badge.rankTrending' => ({required Object n}) => '趋势榜第 #${n} 名', + 'explore.badge.rankSeasonal' => ({required Object season, required Object n}) => '${season}榜第 #${n} 名', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} 人正在观看', + 'explore.badge.available' => '可观看', + 'explore.badge.partiallyAvailable' => '部分可观看', + 'explore.badge.availableIn4k' => '提供 4K', + 'explore.badge.requested' => '已请求', + 'explore.badge.pendingApproval' => '待批准', + 'explore.badge.processing' => '处理中', + 'explore.badge.declined' => '已拒绝', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => '请求失败', + 'explore.badge.requested4k' => '已请求 4K', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '已有 ${available}/${total} 季', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => '第 ${episode} 集将在 ${duration} 后播出', + 'explore.badge.nextAiringIn' => ({required Object duration}) => '下一集将在 ${duration} 后播出', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} 集', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '${n} 分钟/集', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} 人已标记', + 'explore.stats.viewersDay' => ({required Object n}) => '今日 ${n} 人观看', + 'explore.stats.viewersWeek' => ({required Object n}) => '本周 ${n} 人观看', + 'explore.stats.viewersMonth' => ({required Object n}) => '本月 ${n} 人观看', + 'explore.stats.viewersYear' => ({required Object n}) => '今年 ${n} 人观看', + 'explore.stats.viewersAllTime' => ({required Object n}) => '累计 ${n} 人观看', + 'explore.stats.planning' => ({required Object n}) => '${n} 人想看', + 'explore.stats.favorited' => ({required Object n}) => '${n} 人收藏', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} 弃番', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '${n} 条评论', ), + 'explore.stats.votes' => ({required Object n}) => '${n} 票', + 'explore.stats.watching' => ({required Object n}) => '${n} 人正在观看', + 'explore.stats.completed' => ({required Object n}) => '${n} 人已看完', + 'explore.stats.onHold' => ({required Object n}) => '${n} 人搁置', + 'explore.stats.dropped' => ({required Object n}) => '${n} 人弃番', + 'explore.season.winter' => '冬季', + 'explore.season.spring' => '春季', + 'explore.season.summer' => '夏季', + 'explore.season.fall' => '秋季', + 'explore.season.withYear' => ({required Object year, required Object season}) => '${year}年${season}', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV 短片', + 'explore.format.movie' => '电影', + 'explore.format.special' => '特别篇', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => '音乐', + 'explore.format.other' => '其他', + 'explore.sourceMaterial.original' => '原创', + 'explore.sourceMaterial.manga' => '漫画', + 'explore.sourceMaterial.lightNovel' => '轻小说', + 'explore.sourceMaterial.novel' => '小说', + 'explore.sourceMaterial.visualNovel' => '视觉小说', + 'explore.sourceMaterial.game' => '游戏', + 'explore.sourceMaterial.webComic' => '网络漫画', + 'explore.sourceMaterial.musicRelease' => '音乐', + 'explore.sourceMaterial.otherMedia' => '其他', + 'explore.creditRole.director' => '导演', + 'explore.creditRole.writer' => '编剧', + 'explore.creditRole.producer' => '制片人', + 'explore.creditRole.creator' => '创作者', + 'explore.creditRole.composer' => '作曲', + 'explore.relation.prequel' => '前传', + 'explore.relation.sequel' => '续集', + 'explore.relation.sideStory' => '番外篇', + 'explore.relation.spinOff' => '衍生作品', + 'explore.relation.alternativeVersion' => '另一版本', + 'explore.relation.summary' => '总集篇', + 'explore.relation.parentStory' => '原作', + 'explore.relation.adaptation' => '改编', + 'explore.relation.other' => '相关', + 'explore.broadcast' => ({required Object day, required Object time}) => '每周${day} ${time}播出', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '每周${day} ${time} ${timezone}播出', + 'explore.detail.originalTitle' => '原名', + 'explore.detail.alsoKnownAs' => '又名', + 'explore.detail.studios' => '制作公司', + 'explore.detail.country' => '国家/地区', + 'explore.detail.language' => '语言', + 'explore.detail.released' => '上映日期', + 'explore.detail.physicalRelease' => '光盘发售', + 'explore.detail.ended' => '完结日期', + 'explore.detail.addedOn' => ({required Object date}) => '添加于 ${date}', + 'explore.detail.yourRating' => '你的评分', + 'explore.detail.budget' => '预算', + 'explore.detail.revenue' => '票房', + 'explore.detail.contentAdvisory' => '年龄分级', + 'explore.detail.tags' => '标签', + 'explore.detail.revealSpoilerTags' => '显示剧透标签', + 'explore.detail.links' => '链接', + 'explore.detail.watchOn' => '观看平台', + 'explore.detail.watchTrailer' => '观看预告片', + 'explore.detail.openOn' => ({required Object site}) => '在 ${site} 打开', + 'explore.detail.crew' => '演职人员', + 'explore.detail.ratings' => '评分', + 'explore.detail.schedule' => '播出时间', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '由 ${n} 位用户推荐', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '由 ${who} 推荐', + 'explore.detail.favoritedBy' => ({required Object who}) => '由 ${who} 收藏', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '还有 ${n} 集未播出', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => '${percent} 的观众推荐', + 'explore.detail.relatedTitles' => '相关作品', + 'explore.detail.background' => '背景', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '${n} 条结果', ), 'liveTv.title' => '直播电视', 'liveTv.guide' => '节目指南', 'liveTv.noChannels' => '没有可用的频道', @@ -3211,8 +3885,6 @@ extension on TranslationsZh { 'watchTogether.relayUnreachable' => '无法访问中继服务器。网络运营商的屏蔽可能导致“一起看”不可用。', 'watchTogether.reconnectingToHost' => '正在重新连接到主持人…', 'watchTogether.currentPlayback' => '当前播放', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => '加入当前播放', 'watchTogether.joinCurrentPlaybackDescription' => '加入主持人当前正在观看的内容', 'watchTogether.failedToOpenCurrentPlayback' => '无法打开当前播放', @@ -3281,9 +3953,15 @@ extension on TranslationsZh { 'downloads.editSyncRule' => '编辑同步规则', 'downloads.removeSyncRule' => '删除同步规则', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => '停止同步“${title}”?已下载的剧集将被保留。', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => '停止同步“${title}”?', + 'downloads.deleteSyncRuleDownloads' => '同时删除相关下载', + 'downloads.deleteSyncRuleDownloadsDescription' => '被其他同步规则或个人资料使用的下载将保留。', 'downloads.syncRuleCreated' => ({required Object count}) => '同步规则已创建 — 保留 ${count} 集未观看内容', 'downloads.syncRuleUpdated' => '同步规则已更新', 'downloads.syncRuleRemoved' => '同步规则已删除', + 'downloads.syncRuleAndDownloadsRemoved' => '同步规则及相关下载已删除', + 'downloads.syncRuleCleanupBusy' => '同步规则正在更新中,请稍后再试。', + 'downloads.syncRuleCleanupUnavailable' => '无法安全识别相关下载。请重新连接服务器后再试,或在不删除下载的情况下移除规则。', 'downloads.syncedNewEpisodes' => ({required Object title, required Object count}) => '已为 ${title} 同步 ${count} 个新剧集', 'downloads.activeSyncRules' => '同步规则', 'downloads.noSyncRules' => '没有同步规则', @@ -3446,6 +4124,8 @@ extension on TranslationsZh { 'performanceOverlay.dvRpus' => 'DV RPU', 'performanceOverlay.dvRpuAverage' => 'DV RPU 平均', 'performanceOverlay.dvSampleAverage' => 'DV 采样平均', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => '最大亮度', 'performanceOverlay.minLuma' => '最小亮度', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3615,6 +4295,7 @@ extension on TranslationsZh { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => '在 ${service} 上激活 Plezy', 'services.deviceCode.body' => ({required Object url}) => '访问 ${url} 并输入此代码:', 'services.deviceCode.openToActivate' => ({required Object service}) => '打开 ${service} 以激活', @@ -3638,9 +4319,12 @@ extension on TranslationsZh { 'services.libraryFilter.modeHintWhitelist' => '仅同步下方勾选的媒体库。', 'services.libraryFilter.libraries' => '媒体库', 'services.libraryFilter.noLibraries' => '没有可用的媒体库', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '添加 ${product} 服务器', 'addServer.serverUrls' => '服务器 URL', 'addServer.serverUrlsHelper' => '可输入多个 URL,并用逗号分隔。', 'addServer.findServer' => '查找服务器', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => '正在查找本地 ${product} 服务器…', + 'addServer.localMediaBrowserServers' => ({required Object product}) => '本地 ${product} 服务器', 'addServer.username' => '用户名', 'addServer.password' => '密码', 'addServer.signIn' => '登录', @@ -3652,11 +4336,15 @@ extension on TranslationsZh { 'addServer.addPlexTitle' => '使用 Plex 登录', 'addServer.pinExpired' => 'PIN 在登录前已过期。请重试。', 'addServer.failedToRegisterAccount' => ({required Object error}) => '注册账户失败:${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '请输入你的 ${product} 服务器 URL', 'addServer.addConnectionTitle' => '添加连接', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '添加到 ${name}', 'addServer.signInWithPlexCard' => '使用 Plex 登录', 'addServer.signInWithPlexCardSubtitle' => '授权此设备。共享服务器会被添加。', 'addServer.signInWithPlexCardSubtitleScoped' => '授权一个 Plex 账户。Plex Home 用户将成为 Plezy 用户资料。', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '连接到 ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => '输入你的服务器 URL、用户名和密码。', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '登录你的 ${product} 服务器。将绑定到 ${name}。', 'addServer.borrowFromAnotherProfile' => '使用其他用户资料的连接', 'addServer.borrowFromAnotherProfileSubtitle' => '复用另一个用户资料的连接。受 PIN 保护的用户资料需要输入 PIN。', _ => null, diff --git a/lib/i18n/strings_zh_Hant.g.dart b/lib/i18n/strings_zh_Hant.g.dart index c68f1ab3..eced9d64 100644 --- a/lib/i18n/strings_zh_Hant.g.dart +++ b/lib/i18n/strings_zh_Hant.g.dart @@ -68,6 +68,7 @@ class TranslationsZhHant extends TranslationsZh with BaseTranslations '正在等待驗證…\n請在瀏覽器中登入。'; @override String get useBrowser => '使用瀏覽器'; @override String get or => '或'; + @override String connectToMediaBrowser({required Object product}) => '連線至 ${product}'; @override String get useQuickConnect => '使用快速連線(Quick Connect)'; @override String get quickConnectInstructions => '在 Jellyfin 中開啟快速連線並輸入此代碼。'; @override String get quickConnectWaiting => '等待核准…'; @@ -176,6 +178,7 @@ class _Translations$common$zh_Hant extends Translations$common$zh { @override String get fullscreen => '全螢幕'; @override String get exitFullscreen => '退出全螢幕'; @override String get pressBackAgainToExit => '再按一次返回以退出'; + @override late final _Translations$common$ratingSource$zh_Hant ratingSource = _Translations$common$ratingSource$zh_Hant._(_root); } // Path: screens @@ -239,6 +242,7 @@ class _Translations$settings$zh_Hant extends Translations$settings$zh { @override String get darkTheme => '深色'; @override String get oledTheme => 'OLED 純黑'; @override String get libraryDensity => '媒體庫版面配置密度'; + @override String get displayScale => '介面縮放'; @override String get compact => '緊湊'; @override String get comfortable => '舒適'; @override String get tvCornerSpotlightBackdrop => '右上角焦點背景圖'; @@ -288,6 +292,11 @@ class _Translations$settings$zh_Hant extends Translations$settings$zh { @override String bufferSizeMB({required Object size}) => '${size} MB'; @override String get bufferSizeAuto => '自動(推薦)'; @override String bufferSizeWarning({required Object heap, required Object size}) => '可用記憶體為 ${heap} MB。設定 ${size} MB 緩衝可能影響播放穩定性。'; + @override String get playbackBuffer => '播放緩衝'; + @override String get playbackBufferAuto => '自動(建議)'; + @override String get playbackBufferLarge => '大'; + @override String get playbackBufferExtraLarge => '特大'; + @override String get playbackBufferDescription => '針對不穩定的連線緩衝更多內容。也受緩衝大小限制。'; @override String get defaultQualityTitle => '預設畫質'; @override String get musicQualityTitle => '音樂品質'; @override String get subtitleStyling => '字幕樣式'; @@ -321,6 +330,9 @@ class _Translations$settings$zh_Hant extends Translations$settings$zh { @override String get debugLoggingDescription => '啟用詳細日誌記錄以便進行疑難排解'; @override String get viewLogs => '查看日誌'; @override String get viewLogsDescription => '查看應用程式日誌記錄'; + @override String get clearImageCache => '清除圖片快取'; + @override String get clearImageCacheDescription => '清除已快取的封面圖片與縮圖。圖片在重新下載前載入速度可能較慢。'; + @override String get clearImageCacheSuccess => '圖片快取已成功清除'; @override String get resetSettings => '重設設定'; @override String get resetSettingsDescription => '恢復預設設定。此操作無法復原。'; @override String get resetSettingsSuccess => '設定重設成功'; @@ -507,29 +519,118 @@ class _Translations$fileInfo$zh_Hant extends Translations$fileInfo$zh { // Translations @override String get title => '檔案資訊'; + @override String get overview => '概述'; @override String get video => '影片'; @override String get audio => '音訊'; @override String get subtitles => '字幕'; + @override String get images => '內嵌圖片'; + @override String get dataStreams => '資料串流'; + @override String get lyrics => '歌詞'; @override String get file => '檔案'; + @override String get attachments => '附件'; + @override String get delivery => '傳輸方式'; + @override String versionCounter({required Object index, required Object count}) => '第 ${index} 個版本,共 ${count} 個'; + @override String fileCounter({required Object index, required Object count}) => '第 ${index} 個檔案,共 ${count} 個'; + @override String get noStreams => '伺服器回報此檔案沒有串流。'; + @override String get copyPath => '複製路徑'; + @override String get pathCopied => '已複製檔案路徑'; @override String get codec => '編解碼器'; + @override String get codecTag => '編解碼器標籤'; @override String get resolution => '解析度'; + @override String get codedResolution => '編碼解析度'; @override String get bitrate => '位元率'; @override String get frameRate => '影格率'; + @override String get rotation => '旋轉'; + @override String get comment => '註解'; + @override String get audioDescription => '口述影像'; + @override String get headerCompression => '標頭壓縮'; + @override String get sidecarFile => '附屬檔案'; + @override String get transportTimestamp => '傳輸時間戳記'; + @override String get displayOffset => '顯示偏移'; + @override String get previewFailureCode => '預覽失敗代碼'; + @override String get previewRetries => '預覽重試次數'; @override String get aspectRatio => '寬高比'; + @override String get pixelAspectRatio => '像素寬高比'; @override String get profile => '規格檔(Profile)'; + @override String get level => '等級'; @override String get bitDepth => '位元深度'; + @override String get pixelFormat => '像素格式'; @override String get colorSpace => '色彩空間'; @override String get colorRange => '色彩範圍'; @override String get colorPrimaries => '色彩基色'; + @override String get colorTransfer => '色彩轉換'; @override String get chromaSubsampling => '色度抽樣'; + @override String get chromaLocation => '色度位置'; + @override String get scanType => '掃描類型'; + @override String get interlaced => '交錯式'; + @override String get anamorphic => '變形寬銀幕'; + @override String get referenceFrames => '參考影格'; + @override String get dynamicRange => '動態範圍'; + @override String get dolbyVision => 'Dolby Vision'; + @override String get dolbyVisionLevel => 'Dolby Vision 等級'; + @override String get dolbyVisionVersion => 'Dolby Vision 版本'; + @override String get dolbyVisionLayers => 'Dolby Vision 圖層'; + @override String get baseLayerCompatibility => '基礎圖層相容性'; + @override String get avcBitstream => 'AVC 位元串流'; + @override String get nalLengthSize => 'NAL 長度大小'; + @override String get scalingMatrix => '自訂縮放矩陣'; + @override String get streamIdentifier => '串流識別碼'; + @override String get streamIndex => '串流索引'; + @override String get streamId => '串流 ID'; + @override String get language => '語言'; + @override String get languageCode => '語言代碼'; + @override String get streamTitle => '軌道名稱'; @override String get channels => '聲道數'; + @override String get sampleRate => '取樣率'; + @override String get spatialAudio => '空間音訊'; + @override String get textBased => '文字型'; + @override String get subtitleFormat => '附屬檔案格式'; + @override String get provider => '提供者'; + @override String get matchScore => '相符度'; + @override String get externalDelivery => '可分開傳送'; + @override String get sidecarPath => '附屬路徑'; + @override String get sourceStream => '複製來源'; + @override String get temporary => '暫時'; + @override String get timeBase => '時間基準'; @override String get overallBitrate => '總位元率'; @override String get path => '路徑'; + @override String get fileName => '檔案名稱'; @override String get size => '大小'; + @override String get totalSize => '總大小'; @override String get container => '封裝格式'; @override String get duration => '長度'; + @override String get previewThumbnails => '預覽縮圖'; + @override String get previewIndex => '預覽索引'; + @override String get packetLength => '封包長度'; + @override String get filePresent => '檔案存在'; + @override String get fileReadable => '伺服器可讀取'; + @override String get streamPath => '串流路徑'; @override String get optimizedForStreaming => '已最佳化串流播放'; @override String get has64bitOffsets => '具 64 位元偏移量'; + @override String get protocol => '通訊協定'; + @override String get mediaType => '媒體類型'; + @override String get sourceKind => '來源類型'; + @override String get optimizedVersion => '最佳化版本'; + @override String get optimizationTarget => '最佳化目標'; + @override String get deletedAt => '已刪除'; + @override String get remoteSource => '遠端來源'; + @override String get infiniteStream => '無限串流'; + @override String get directPlay => '直接播放'; + @override String get directStream => '直接串流'; + @override String get transcoding => '轉碼'; + @override String get etag => 'ETag'; + @override String get versionId => '版本 ID'; + @override String get fileId => '檔案 ID'; + @override String get defaultAudioTrack => '預設音軌'; + @override String get defaultSubtitleTrack => '預設字幕軌'; + @override String get subtitlesOff => '關閉'; + @override String get flagDefault => '預設'; + @override String get flagForced => '強制'; + @override String get flagSelected => '已選取'; + @override String get flagExternal => '外部'; + @override String get flagHearingImpaired => '聽障輔助'; + @override String get flagDub => '配音'; + @override String get flagOriginal => '原音'; } // Path: mediaMenu @@ -547,7 +648,32 @@ class _Translations$mediaMenu$zh_Hant extends Translations$mediaMenu$zh { @override String get shufflePlay => '隨機播放'; @override String get shuffleNotAvailableOffline => '離線時無法隨機播放'; @override String get fileInfo => '檔案資訊'; + @override String get deleteEpisodeFromServer => '從伺服器刪除單集'; + @override String get deleteSeasonFromServer => '從伺服器刪除季'; + @override String get deleteShowFromServer => '從伺服器刪除影集'; + @override String get deleteMovieFromServer => '從伺服器刪除電影'; + @override String get deleteEpisodeTitle => '刪除此單集?'; + @override String get deleteSeasonTitle => '刪除此季?'; + @override String get deleteShowTitle => '刪除此影集?'; + @override String get deleteMovieTitle => '刪除此電影?'; + @override String get deleteEpisodeConfirm => '刪除單集'; + @override String get deleteSeasonConfirm => '刪除季'; + @override String get deleteShowConfirm => '刪除影集'; + @override String get deleteMovieConfirm => '刪除電影'; + @override String get deleteAnyway => '仍要刪除'; + @override String confirmDeleteTarget({required Object title}) => '確定要從您的伺服器永久刪除「${title}」嗎?'; @override String get deleteMultipleWarning => '這將會刪除所有單集及其檔案。'; + @override String deleteEpisodeCountWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '這會刪除其中全部 ${n} 集及其檔案。', + ); + @override String deleteMultiPartWarning({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '此項目分散儲存於 ${n} 個檔案中,且全部都會被刪除。', + ); + @override String deleteSharedFileHeading({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '另有 ${n} 集儲存在同一檔案中,也會一併被刪除:', + ); + @override String get deleteScopeUnverifiedProbeFailed => 'Plezy 無法確認此操作會刪除哪些檔案,因此刪除範圍可能超出上方所列的項目。請取消後重試,或仍要刪除。'; + @override String get deleteScopeUnverifiedNoFileInfo => '您的伺服器未提供此項目的檔案資訊,因此 Plezy 無法確認此操作會刪除哪些檔案。刪除範圍可能超出上方所列的項目。'; @override String get mediaDeletedSuccessfully => '媒體已成功刪除'; @override String get mediaFailedToDelete => '刪除媒體失敗'; @override String get rate => '評分'; @@ -658,6 +784,9 @@ class _Translations$videoControls$zh_Hant extends Translations$videoControls$zh @override String get playNext => '播放下一集'; @override String get playButton => '播放'; @override String get pauseButton => '暫停'; + @override String get playbackPaused => '已暫停'; + @override String get playbackResumed => '播放中'; + @override String get loadingVideo => '正在載入影片'; @override String get showPlaybackControls => '顯示播放控制項'; @override String get hidePlaybackControls => '隱藏播放控制項'; @override String seekBackwardButton({required Object seconds}) => '後退 ${seconds} 秒'; @@ -726,6 +855,7 @@ class _Translations$messages$zh_Hant extends Translations$messages$zh { ); @override String get removedFromContinueWatching => '已從「繼續觀看」中移除'; @override String errorLoading({required Object error}) => '錯誤:${error}'; + @override String get searchPartialResults => '部分媒體伺服器無法搜尋。目前顯示可取得的結果。'; @override String get streamInterrupted => '影片串流中斷。請按播放鍵或拖動進度條重試。'; @override String get liveStreamInterrupted => '直播串流中斷。請按播放鍵重試。'; @override String get fileInfoNotAvailable => '無法取得檔案資訊'; @@ -764,6 +894,8 @@ class _Translations$messages$zh_Hant extends Translations$messages$zh { @override String get switchingToCompatiblePlayer => '正在切換至相容的播放器…'; @override String get serverLimitTitle => '播放失敗'; @override String get serverLimitBody => '伺服器錯誤(HTTP 500)。伺服器的頻寬或轉碼限制可能拒絕此播放要求。請聯絡伺服器擁有者調整設定。'; + @override String get mediaUnreadableTitle => '檔案無法使用'; + @override String get mediaUnreadableBody => '伺服器找到了此項目,但無法讀取其檔案(HTTP 404)。檔案可能已移動、刪除,或其儲存空間離線。請聯絡伺服器擁有者檢查檔案並重新掃描媒體庫。'; @override String get logsUploaded => '日誌已上傳'; @override String get logsUploadFailed => '上傳日誌失敗'; @override String get logId => '日誌 ID'; @@ -917,6 +1049,8 @@ class _Translations$connections$zh_Hant extends Translations$connections$zh { @override String sessionExpiredOne({required Object name}) => '${name} 的工作階段已過期'; @override String sessionExpiredMany({required Object count}) => '${count} 個伺服器的工作階段已過期'; @override String get signInAgain => '重新登入'; + @override String editMediaBrowserTitle({required Object product}) => '編輯 ${product} 連線'; + @override String editMediaBrowserIntro({required Object serverName}) => '為 ${serverName} 新增或移除 URL。Plezy 將使用延遲最低且可連線的 URL。'; } // Path: discover @@ -960,6 +1094,7 @@ class _Translations$errors$zh_Hant extends Translations$errors$zh { // Translations @override String searchFailed({required Object error}) => '搜尋失敗:${error}'; + @override String get searchUnavailable => '搜尋無法連線至任何媒體伺服器。'; @override String connectionTimeout({required Object context}) => '載入 ${context} 時連線逾時'; @override String get connectionFailed => '無法連線至媒體伺服器'; @override String unableToLoad({required Object context}) => '無法載入 ${context}。請重試。'; @@ -1077,6 +1212,45 @@ class _Translations$logs$zh_Hant extends Translations$logs$zh { @override String get uploadLogs => '上傳日誌'; } +// Path: startup +class _Translations$startup$zh_Hant extends Translations$startup$zh { + _Translations$startup$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get failedTitle => 'Plezy 無法啟動'; + @override String get failedBody => '啟動期間發生問題。下方詳細資料可識別失敗的原因。'; + @override String get failedBodyRepairable => 'Plezy 儲存的設定檔已損壞,必須先重建才能啟動。重試無法解決問題 — 請選擇「修復儲存空間」。'; + @override String get phaseLabel => '步驟'; + @override String get showDetails => '顯示詳細資料'; + @override String get hideDetails => '隱藏詳細資料'; + @override String get copyDetails => '複製詳細資料'; + @override String get detailsCopied => '詳細資料已複製到剪貼簿'; + @override String get uploadDetails => '上傳詳細資料'; + @override String get repairStorage => '修復儲存空間'; + @override String get repairTitle => '修復已儲存的資料?'; + @override String get repairBodyCommon => 'Plezy 的設定檔已損壞且無法讀取。修復會將所有設定重設為預設值。'; + @override String get repairBodyOneCredential => '有一筆已儲存的登入資訊損壞且無法讀取。修復僅會移除該筆資訊,其他設定將保持不變。'; + @override String get repairBodySignInsKept => '您的伺服器與使用者設定檔應可保持登入狀態。'; + @override String get repairBodySignInsLost => '保護已儲存登入資訊的金鑰無法從此檔案中復原,因此您必須重新登入每個伺服器與使用者設定檔。您媒體伺服器上的內容不受影響。'; + @override String get repairBodySessionsUncertain => '追蹤服務(MAL、AniList、Simkl、Trakt)與 Seerr 分別儲存,可能保留也可能遺失。Plezy 會明確告知保留了哪些項目。'; + @override String get repairConfirm => '修復'; + @override String get repairSucceeded => '儲存空間已修復'; + @override String get repairNeedsRestart => '儲存空間已修復 — 需要重新啟動'; + @override String get restartRequiredBody => '您的資料已修復,但 Plezy 必須重新啟動才能使用。請關閉 Plezy 後重新開啟。'; + @override String get quitPlezy => '退出 Plezy'; + @override String get repairFailed => '修復失敗'; + @override String get repairKeptSignIns => '您的伺服器與使用者設定檔仍保持登入狀態。'; + @override String get repairLostSignIns => '保護已儲存登入資訊的金鑰無法復原。您必須重新登入每個伺服器與使用者設定檔。'; + @override String get repairLostSessions => '至少一個追蹤服務或 Seerr 連線已遺失,必須重新連線。'; + @override String get backupTitle => '已保留損壞檔案的副本'; + @override String get backupWarning => '其中包含您的登入憑證。請勿上傳或分享。'; + @override String get deleteBackup => '刪除副本'; + @override String get backupDeleted => '副本已刪除。'; + @override String get previousFailureTitle => 'Plezy 上次啟動失敗'; +} + // Path: licenses class _Translations$licenses$zh_Hant extends Translations$licenses$zh { _Translations$licenses$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); @@ -1131,6 +1305,19 @@ class _Translations$explore$zh_Hant extends Translations$explore$zh { @override String searchEmpty({required Object query}) => '沒有「${query}」的結果'; @override String searchPrompt({required Object source}) => '在 ${source} 搜尋電影與影集。'; @override String get searchFailed => '搜尋失敗。請檢查網路連線後重試。'; + @override late final _Translations$explore$badge$zh_Hant badge = _Translations$explore$badge$zh_Hant._(_root); + @override late final _Translations$explore$stats$zh_Hant stats = _Translations$explore$stats$zh_Hant._(_root); + @override late final _Translations$explore$season$zh_Hant season = _Translations$explore$season$zh_Hant._(_root); + @override late final _Translations$explore$format$zh_Hant format = _Translations$explore$format$zh_Hant._(_root); + @override late final _Translations$explore$sourceMaterial$zh_Hant sourceMaterial = _Translations$explore$sourceMaterial$zh_Hant._(_root); + @override late final _Translations$explore$creditRole$zh_Hant creditRole = _Translations$explore$creditRole$zh_Hant._(_root); + @override late final _Translations$explore$relation$zh_Hant relation = _Translations$explore$relation$zh_Hant._(_root); + @override String broadcast({required Object day, required Object time}) => '${day} ${time} 播出'; + @override String broadcastWithZone({required Object day, required Object time, required Object timezone}) => '${day} ${time} ${timezone} 播出'; + @override late final _Translations$explore$detail$zh_Hant detail = _Translations$explore$detail$zh_Hant._(_root); + @override String totalResults({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '${n} 筆結果', + ); } // Path: liveTv @@ -1437,9 +1624,15 @@ class _Translations$downloads$zh_Hant extends Translations$downloads$zh { @override String get editSyncRule => '編輯同步規則'; @override String get removeSyncRule => '刪除同步規則'; @override String removeSyncRuleConfirm({required Object title}) => '停止同步「${title}」?已下載的單集將會保留。'; + @override String removeListSyncRuleConfirm({required Object title}) => '停止同步「${title}」?'; + @override String get deleteSyncRuleDownloads => '一併刪除相關的下載內容'; + @override String get deleteSyncRuleDownloadsDescription => '供其他同步規則或使用者設定檔使用的下載內容將予以保留。'; @override String syncRuleCreated({required Object count}) => '同步規則已建立 — 將保留 ${count} 個未觀看單集'; @override String get syncRuleUpdated => '同步規則已更新'; @override String get syncRuleRemoved => '同步規則已刪除'; + @override String get syncRuleAndDownloadsRemoved => '同步規則與相關的下載內容已刪除'; + @override String get syncRuleCleanupBusy => '同步規則正在更新中。請稍後再試。'; + @override String get syncRuleCleanupUnavailable => '無法安全地識別相關的下載內容。請重新連線伺服器後再試,或在不刪除下載內容的情況下移除規則。'; @override String syncedNewEpisodes({required Object title, required Object count}) => '已為 ${title} 同步 ${count} 個新單集'; @override String get activeSyncRules => '同步規則'; @override String get noSyncRules => '沒有同步規則'; @@ -1797,9 +1990,12 @@ class _Translations$addServer$zh_Hant extends Translations$addServer$zh { final TranslationsZhHant _root; // ignore: unused_field // Translations + @override String addMediaBrowserTitle({required Object product}) => '新增 ${product} 伺服器'; @override String get serverUrls => '伺服器 URL'; @override String get serverUrlsHelper => '可輸入多個連線網址,以逗號區隔。'; @override String get findServer => '尋找伺服器'; + @override String searchingLocalMediaBrowserServers({required Object product}) => '正在尋找本機的 ${product} 伺服器…'; + @override String localMediaBrowserServers({required Object product}) => '本機的 ${product} 伺服器'; @override String get username => '使用者名稱'; @override String get password => '密碼'; @override String get signIn => '登入'; @@ -1811,15 +2007,39 @@ class _Translations$addServer$zh_Hant extends Translations$addServer$zh { @override String get addPlexTitle => '使用 Plex 登入'; @override String get pinExpired => 'PIN 碼在登入前已過期。請重試。'; @override String failedToRegisterAccount({required Object error}) => '註冊帳戶失敗:${error}'; + @override String enterMediaBrowserUrlError({required Object product}) => '請輸入您的 ${product} 伺服器 URL'; @override String get addConnectionTitle => '新增連線'; @override String addConnectionTitleScoped({required Object name}) => '新增連線至 ${name}'; @override String get signInWithPlexCard => '使用 Plex 登入'; @override String get signInWithPlexCardSubtitle => '授權此裝置。將會新增共享的伺服器連線。'; @override String get signInWithPlexCardSubtitleScoped => '授權 Plex 帳戶。Home 使用者會建立為個別的使用者設定檔。'; + @override String connectToMediaBrowserCard({required Object product}) => '連線至 ${product}'; + @override String get connectToMediaBrowserCardSubtitle => '輸入您的伺服器 URL、使用者名稱與密碼。'; + @override String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => '登入您的 ${product} 伺服器。將綁定至 ${name}。'; @override String get borrowFromAnotherProfile => '從另一個使用者設定檔共用'; @override String get borrowFromAnotherProfileSubtitle => '重複使用另一個使用者設定檔的連線資訊。受 PIN 碼保護的使用者設定檔需輸入 PIN 碼。'; } +// Path: common.ratingSource +class _Translations$common$ratingSource$zh_Hant extends Translations$common$ratingSource$zh { + _Translations$common$ratingSource$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get critic => '影評人'; + @override String get audience => '觀眾'; + @override String get imdb => 'IMDb'; + @override String get tmdb => 'TMDB'; + @override String get rottenTomatoes => 'Rotten Tomatoes'; + @override String get simkl => 'Simkl'; + @override String get mal => 'MyAnimeList'; + @override String get anilist => 'AniList'; + @override String get trakt => 'Trakt'; + @override String get rottenTomatoesCritic => 'Rotten Tomatoes 影評人'; + @override String get rottenTomatoesAudience => 'Rotten Tomatoes 觀眾'; +} + // Path: hotkeys.actions class _Translations$hotkeys$actions$zh_Hant extends Translations$hotkeys$actions$zh { _Translations$hotkeys$actions$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); @@ -1983,6 +2203,184 @@ class _Translations$explore$status$zh_Hant extends Translations$explore$status$z @override String get upcoming => '即將上線'; } +// Path: explore.badge +class _Translations$explore$badge$zh_Hant extends Translations$explore$badge$zh { + _Translations$explore$badge$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String rankPopular({required Object n}) => '#${n} 熱門'; + @override String rankAiring({required Object n}) => '#${n} 播出中'; + @override String rankRated({required Object n}) => '#${n} 高分'; + @override String rankFavorited({required Object n}) => '#${n} 最多收藏'; + @override String rankTrending({required Object n}) => '#${n} 趨勢'; + @override String rankSeasonal({required Object n, required Object season}) => '#${n} · ${season}'; + @override String watchingNow({required Object n}) => '${n} 觀看中'; + @override String get available => '可觀看'; + @override String get partiallyAvailable => '部分可觀看'; + @override String get availableIn4k => '4K 可觀看'; + @override String get requested => '已提出請求'; + @override String get pendingApproval => '等待核准'; + @override String get processing => '處理中'; + @override String get declined => '已拒絕'; + @override String get requestFailed => '請求失敗'; + @override String get requested4k => '已請求 4K'; + @override String seasonsAvailable({required Object available, required Object total}) => '${available}/${total} 季'; + @override String nextEpisodeIn({required Object episode, required Object duration}) => '第 ${episode} 集 ${duration} 後播出'; + @override String nextAiringIn({required Object duration}) => '${duration} 後播出'; + @override String episodesShort({required Object n}) => '${n} 集'; + @override String minutesPerEpisode({required Object n}) => '每集 ${n} 分鐘'; + @override String get adult => '18+'; +} + +// Path: explore.stats +class _Translations$explore$stats$zh_Hant extends Translations$explore$stats$zh { + _Translations$explore$stats$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String listed({required Object n}) => '${n} 人已收錄'; + @override String viewersDay({required Object n}) => '今日 ${n} 人觀看'; + @override String viewersWeek({required Object n}) => '本週 ${n} 人觀看'; + @override String viewersMonth({required Object n}) => '本月 ${n} 人觀看'; + @override String viewersYear({required Object n}) => '今年 ${n} 人觀看'; + @override String viewersAllTime({required Object n}) => '累計 ${n} 人觀看'; + @override String planning({required Object n}) => '${n} 人打算觀看'; + @override String favorited({required Object n}) => '${n} 人收藏'; + @override String dropRate({required Object percent}) => '${percent} 的人棄番'; + @override String comments({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '${n} 則留言', + ); + @override String votes({required Object n}) => '${n} 票'; + @override String watching({required Object n}) => '${n} 人正在觀看'; + @override String completed({required Object n}) => '${n} 人已看完'; + @override String onHold({required Object n}) => '${n} 人擱置中'; + @override String dropped({required Object n}) => '${n} 人棄番'; +} + +// Path: explore.season +class _Translations$explore$season$zh_Hant extends Translations$explore$season$zh { + _Translations$explore$season$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get winter => '冬季'; + @override String get spring => '春季'; + @override String get summer => '夏季'; + @override String get fall => '秋季'; + @override String withYear({required Object season, required Object year}) => '${season} ${year} 年'; +} + +// Path: explore.format +class _Translations$explore$format$zh_Hant extends Translations$explore$format$zh { + _Translations$explore$format$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get tv => 'TV'; + @override String get tvShort => 'TV 短片'; + @override String get movie => '電影'; + @override String get special => '特別篇'; + @override String get ova => 'OVA'; + @override String get ona => 'ONA'; + @override String get music => '音樂'; + @override String get other => '其他'; +} + +// Path: explore.sourceMaterial +class _Translations$explore$sourceMaterial$zh_Hant extends Translations$explore$sourceMaterial$zh { + _Translations$explore$sourceMaterial$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get original => '原創'; + @override String get manga => '漫畫'; + @override String get lightNovel => '輕小說'; + @override String get novel => '小說'; + @override String get visualNovel => '視覺小說'; + @override String get game => '遊戲'; + @override String get webComic => '網路漫畫'; + @override String get musicRelease => '音樂'; + @override String get otherMedia => '其他'; +} + +// Path: explore.creditRole +class _Translations$explore$creditRole$zh_Hant extends Translations$explore$creditRole$zh { + _Translations$explore$creditRole$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get director => '導演'; + @override String get writer => '編劇'; + @override String get producer => '製作人'; + @override String get creator => '原作者'; + @override String get composer => '作曲家'; +} + +// Path: explore.relation +class _Translations$explore$relation$zh_Hant extends Translations$explore$relation$zh { + _Translations$explore$relation$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get prequel => '前傳'; + @override String get sequel => '續集'; + @override String get sideStory => '外傳'; + @override String get spinOff => '衍生作品'; + @override String get alternativeVersion => '其他版本'; + @override String get summary => '總集篇'; + @override String get parentStory => '原作'; + @override String get adaptation => '改編'; + @override String get other => '相關'; +} + +// Path: explore.detail +class _Translations$explore$detail$zh_Hant extends Translations$explore$detail$zh { + _Translations$explore$detail$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); + + final TranslationsZhHant _root; // ignore: unused_field + + // Translations + @override String get originalTitle => '原始標題'; + @override String get alsoKnownAs => '又名'; + @override String get studios => '製作公司'; + @override String get country => '國家'; + @override String get language => '語言'; + @override String get released => '發行日期'; + @override String get physicalRelease => '光碟發行'; + @override String get ended => '已完結'; + @override String addedOn({required Object date}) => '新增於 ${date}'; + @override String get yourRating => '您的評分'; + @override String get budget => '預算'; + @override String get revenue => '票房'; + @override String get contentAdvisory => '年齡分級'; + @override String get tags => '標籤'; + @override String get revealSpoilerTags => '顯示劇透標籤'; + @override String get links => '連結'; + @override String get watchOn => '觀看平台'; + @override String get watchTrailer => '觀看預告片'; + @override String openOn({required Object site}) => '在 ${site} 開啟'; + @override String get crew => '幕後團隊'; + @override String get ratings => '評分'; + @override String get schedule => '播出時間'; + @override String recommendedByUsers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + other: '${n} 位使用者推薦', + ); + @override String recommendedBy({required Object who}) => '由 ${who} 推薦'; + @override String favoritedBy({required Object who}) => '由 ${who} 收藏'; + @override String unairedEpisodes({required Object n}) => '尚有 ${n} 集未播出'; + @override String recommendedByPercent({required Object percent}) => '${percent} 的觀眾推薦'; + @override String get relatedTitles => '相關作品'; + @override String get background => '背景介紹'; +} + // Path: downloads.backgroundWarning class _Translations$downloads$backgroundWarning$zh_Hant extends Translations$downloads$backgroundWarning$zh { _Translations$downloads$backgroundWarning$zh_Hant._(TranslationsZhHant root) : this._root = root, super.internal(root); @@ -2126,6 +2524,7 @@ class _Translations$services$names$zh_Hant extends Translations$services$names$z @override String get anilist => 'AniList'; @override String get simkl => 'Simkl'; @override String get seerr => 'Seerr'; + @override String get mdblist => 'MDBList'; } // Path: services.deviceCode @@ -2195,6 +2594,7 @@ extension on TranslationsZhHant { 'auth.waitingForAuth' => '正在等待驗證…\n請在瀏覽器中登入。', 'auth.useBrowser' => '使用瀏覽器', 'auth.or' => '或', + 'auth.connectToMediaBrowser' => ({required Object product}) => '連線至 ${product}', 'auth.useQuickConnect' => '使用快速連線(Quick Connect)', 'auth.quickConnectInstructions' => '在 Jellyfin 中開啟快速連線並輸入此代碼。', 'auth.quickConnectWaiting' => '等待核准…', @@ -2246,6 +2646,17 @@ extension on TranslationsZhHant { 'common.fullscreen' => '全螢幕', 'common.exitFullscreen' => '退出全螢幕', 'common.pressBackAgainToExit' => '再按一次返回以退出', + 'common.ratingSource.critic' => '影評人', + 'common.ratingSource.audience' => '觀眾', + 'common.ratingSource.imdb' => 'IMDb', + 'common.ratingSource.tmdb' => 'TMDB', + 'common.ratingSource.rottenTomatoes' => 'Rotten Tomatoes', + 'common.ratingSource.simkl' => 'Simkl', + 'common.ratingSource.mal' => 'MyAnimeList', + 'common.ratingSource.anilist' => 'AniList', + 'common.ratingSource.trakt' => 'Trakt', + 'common.ratingSource.rottenTomatoesCritic' => 'Rotten Tomatoes 影評人', + 'common.ratingSource.rottenTomatoesAudience' => 'Rotten Tomatoes 觀眾', 'screens.licenses' => '授權條款', 'screens.switchProfile' => '切換使用者', 'screens.subtitleStyling' => '字幕樣式', @@ -2282,6 +2693,7 @@ extension on TranslationsZhHant { 'settings.darkTheme' => '深色', 'settings.oledTheme' => 'OLED 純黑', 'settings.libraryDensity' => '媒體庫版面配置密度', + 'settings.displayScale' => '介面縮放', 'settings.compact' => '緊湊', 'settings.comfortable' => '舒適', 'settings.tvCornerSpotlightBackdrop' => '右上角焦點背景圖', @@ -2331,6 +2743,11 @@ extension on TranslationsZhHant { 'settings.bufferSizeMB' => ({required Object size}) => '${size} MB', 'settings.bufferSizeAuto' => '自動(推薦)', 'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '可用記憶體為 ${heap} MB。設定 ${size} MB 緩衝可能影響播放穩定性。', + 'settings.playbackBuffer' => '播放緩衝', + 'settings.playbackBufferAuto' => '自動(建議)', + 'settings.playbackBufferLarge' => '大', + 'settings.playbackBufferExtraLarge' => '特大', + 'settings.playbackBufferDescription' => '針對不穩定的連線緩衝更多內容。也受緩衝大小限制。', 'settings.defaultQualityTitle' => '預設畫質', 'settings.musicQualityTitle' => '音樂品質', 'settings.subtitleStyling' => '字幕樣式', @@ -2364,6 +2781,9 @@ extension on TranslationsZhHant { 'settings.debugLoggingDescription' => '啟用詳細日誌記錄以便進行疑難排解', 'settings.viewLogs' => '查看日誌', 'settings.viewLogsDescription' => '查看應用程式日誌記錄', + 'settings.clearImageCache' => '清除圖片快取', + 'settings.clearImageCacheDescription' => '清除已快取的封面圖片與縮圖。圖片在重新下載前載入速度可能較慢。', + 'settings.clearImageCacheSuccess' => '圖片快取已成功清除', 'settings.resetSettings' => '重設設定', 'settings.resetSettingsDescription' => '恢復預設設定。此操作無法復原。', 'settings.resetSettingsSuccess' => '設定重設成功', @@ -2547,29 +2967,118 @@ extension on TranslationsZhHant { 'hotkeys.actions.skipMarker' => '跳過片頭/片尾', 'hotkeys.actions.screenshot' => '螢幕截圖', 'fileInfo.title' => '檔案資訊', + 'fileInfo.overview' => '概述', 'fileInfo.video' => '影片', 'fileInfo.audio' => '音訊', 'fileInfo.subtitles' => '字幕', + 'fileInfo.images' => '內嵌圖片', + 'fileInfo.dataStreams' => '資料串流', + 'fileInfo.lyrics' => '歌詞', 'fileInfo.file' => '檔案', + 'fileInfo.attachments' => '附件', + 'fileInfo.delivery' => '傳輸方式', + 'fileInfo.versionCounter' => ({required Object index, required Object count}) => '第 ${index} 個版本,共 ${count} 個', + 'fileInfo.fileCounter' => ({required Object index, required Object count}) => '第 ${index} 個檔案,共 ${count} 個', + 'fileInfo.noStreams' => '伺服器回報此檔案沒有串流。', + 'fileInfo.copyPath' => '複製路徑', + 'fileInfo.pathCopied' => '已複製檔案路徑', 'fileInfo.codec' => '編解碼器', + 'fileInfo.codecTag' => '編解碼器標籤', 'fileInfo.resolution' => '解析度', + 'fileInfo.codedResolution' => '編碼解析度', 'fileInfo.bitrate' => '位元率', 'fileInfo.frameRate' => '影格率', + 'fileInfo.rotation' => '旋轉', + 'fileInfo.comment' => '註解', + 'fileInfo.audioDescription' => '口述影像', + 'fileInfo.headerCompression' => '標頭壓縮', + 'fileInfo.sidecarFile' => '附屬檔案', + 'fileInfo.transportTimestamp' => '傳輸時間戳記', + 'fileInfo.displayOffset' => '顯示偏移', + 'fileInfo.previewFailureCode' => '預覽失敗代碼', + 'fileInfo.previewRetries' => '預覽重試次數', 'fileInfo.aspectRatio' => '寬高比', + 'fileInfo.pixelAspectRatio' => '像素寬高比', 'fileInfo.profile' => '規格檔(Profile)', + 'fileInfo.level' => '等級', 'fileInfo.bitDepth' => '位元深度', + 'fileInfo.pixelFormat' => '像素格式', 'fileInfo.colorSpace' => '色彩空間', 'fileInfo.colorRange' => '色彩範圍', 'fileInfo.colorPrimaries' => '色彩基色', + 'fileInfo.colorTransfer' => '色彩轉換', 'fileInfo.chromaSubsampling' => '色度抽樣', + 'fileInfo.chromaLocation' => '色度位置', + 'fileInfo.scanType' => '掃描類型', + 'fileInfo.interlaced' => '交錯式', + 'fileInfo.anamorphic' => '變形寬銀幕', + 'fileInfo.referenceFrames' => '參考影格', + 'fileInfo.dynamicRange' => '動態範圍', + 'fileInfo.dolbyVision' => 'Dolby Vision', + 'fileInfo.dolbyVisionLevel' => 'Dolby Vision 等級', + 'fileInfo.dolbyVisionVersion' => 'Dolby Vision 版本', + 'fileInfo.dolbyVisionLayers' => 'Dolby Vision 圖層', + 'fileInfo.baseLayerCompatibility' => '基礎圖層相容性', + 'fileInfo.avcBitstream' => 'AVC 位元串流', + 'fileInfo.nalLengthSize' => 'NAL 長度大小', + 'fileInfo.scalingMatrix' => '自訂縮放矩陣', + 'fileInfo.streamIdentifier' => '串流識別碼', + 'fileInfo.streamIndex' => '串流索引', + 'fileInfo.streamId' => '串流 ID', + 'fileInfo.language' => '語言', + 'fileInfo.languageCode' => '語言代碼', + 'fileInfo.streamTitle' => '軌道名稱', 'fileInfo.channels' => '聲道數', + 'fileInfo.sampleRate' => '取樣率', + 'fileInfo.spatialAudio' => '空間音訊', + 'fileInfo.textBased' => '文字型', + 'fileInfo.subtitleFormat' => '附屬檔案格式', + 'fileInfo.provider' => '提供者', + 'fileInfo.matchScore' => '相符度', + 'fileInfo.externalDelivery' => '可分開傳送', + 'fileInfo.sidecarPath' => '附屬路徑', + 'fileInfo.sourceStream' => '複製來源', + 'fileInfo.temporary' => '暫時', + 'fileInfo.timeBase' => '時間基準', 'fileInfo.overallBitrate' => '總位元率', 'fileInfo.path' => '路徑', + 'fileInfo.fileName' => '檔案名稱', 'fileInfo.size' => '大小', + 'fileInfo.totalSize' => '總大小', 'fileInfo.container' => '封裝格式', 'fileInfo.duration' => '長度', + 'fileInfo.previewThumbnails' => '預覽縮圖', + 'fileInfo.previewIndex' => '預覽索引', + 'fileInfo.packetLength' => '封包長度', + 'fileInfo.filePresent' => '檔案存在', + 'fileInfo.fileReadable' => '伺服器可讀取', + 'fileInfo.streamPath' => '串流路徑', 'fileInfo.optimizedForStreaming' => '已最佳化串流播放', 'fileInfo.has64bitOffsets' => '具 64 位元偏移量', + 'fileInfo.protocol' => '通訊協定', + 'fileInfo.mediaType' => '媒體類型', + 'fileInfo.sourceKind' => '來源類型', + 'fileInfo.optimizedVersion' => '最佳化版本', + 'fileInfo.optimizationTarget' => '最佳化目標', + 'fileInfo.deletedAt' => '已刪除', + 'fileInfo.remoteSource' => '遠端來源', + 'fileInfo.infiniteStream' => '無限串流', + 'fileInfo.directPlay' => '直接播放', + 'fileInfo.directStream' => '直接串流', + 'fileInfo.transcoding' => '轉碼', + 'fileInfo.etag' => 'ETag', + 'fileInfo.versionId' => '版本 ID', + 'fileInfo.fileId' => '檔案 ID', + 'fileInfo.defaultAudioTrack' => '預設音軌', + 'fileInfo.defaultSubtitleTrack' => '預設字幕軌', + 'fileInfo.subtitlesOff' => '關閉', + 'fileInfo.flagDefault' => '預設', + 'fileInfo.flagForced' => '強制', + 'fileInfo.flagSelected' => '已選取', + 'fileInfo.flagExternal' => '外部', + 'fileInfo.flagHearingImpaired' => '聽障輔助', + 'fileInfo.flagDub' => '配音', + 'fileInfo.flagOriginal' => '原音', 'mediaMenu.markAsWatched' => '標記為已觀看', 'mediaMenu.markAsUnwatched' => '標記為未觀看', 'mediaMenu.removeFromContinueWatching' => '從「繼續觀看」中移除', @@ -2578,7 +3087,28 @@ extension on TranslationsZhHant { 'mediaMenu.shufflePlay' => '隨機播放', 'mediaMenu.shuffleNotAvailableOffline' => '離線時無法隨機播放', 'mediaMenu.fileInfo' => '檔案資訊', + 'mediaMenu.deleteEpisodeFromServer' => '從伺服器刪除單集', + 'mediaMenu.deleteSeasonFromServer' => '從伺服器刪除季', + 'mediaMenu.deleteShowFromServer' => '從伺服器刪除影集', + 'mediaMenu.deleteMovieFromServer' => '從伺服器刪除電影', + 'mediaMenu.deleteEpisodeTitle' => '刪除此單集?', + 'mediaMenu.deleteSeasonTitle' => '刪除此季?', + 'mediaMenu.deleteShowTitle' => '刪除此影集?', + 'mediaMenu.deleteMovieTitle' => '刪除此電影?', + 'mediaMenu.deleteEpisodeConfirm' => '刪除單集', + 'mediaMenu.deleteSeasonConfirm' => '刪除季', + _ => null, + } ?? switch (path) { + 'mediaMenu.deleteShowConfirm' => '刪除影集', + 'mediaMenu.deleteMovieConfirm' => '刪除電影', + 'mediaMenu.deleteAnyway' => '仍要刪除', + 'mediaMenu.confirmDeleteTarget' => ({required Object title}) => '確定要從您的伺服器永久刪除「${title}」嗎?', 'mediaMenu.deleteMultipleWarning' => '這將會刪除所有單集及其檔案。', + 'mediaMenu.deleteEpisodeCountWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '這會刪除其中全部 ${n} 集及其檔案。', ), + 'mediaMenu.deleteMultiPartWarning' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '此項目分散儲存於 ${n} 個檔案中,且全部都會被刪除。', ), + 'mediaMenu.deleteSharedFileHeading' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '另有 ${n} 集儲存在同一檔案中,也會一併被刪除:', ), + 'mediaMenu.deleteScopeUnverifiedProbeFailed' => 'Plezy 無法確認此操作會刪除哪些檔案,因此刪除範圍可能超出上方所列的項目。請取消後重試,或仍要刪除。', + 'mediaMenu.deleteScopeUnverifiedNoFileInfo' => '您的伺服器未提供此項目的檔案資訊,因此 Plezy 無法確認此操作會刪除哪些檔案。刪除範圍可能超出上方所列的項目。', 'mediaMenu.mediaDeletedSuccessfully' => '媒體已成功刪除', 'mediaMenu.mediaFailedToDelete' => '刪除媒體失敗', 'mediaMenu.rate' => '評分', @@ -2644,6 +3174,9 @@ extension on TranslationsZhHant { 'videoControls.playNext' => '播放下一集', 'videoControls.playButton' => '播放', 'videoControls.pauseButton' => '暫停', + 'videoControls.playbackPaused' => '已暫停', + 'videoControls.playbackResumed' => '播放中', + 'videoControls.loadingVideo' => '正在載入影片', 'videoControls.showPlaybackControls' => '顯示播放控制項', 'videoControls.hidePlaybackControls' => '隱藏播放控制項', 'videoControls.seekBackwardButton' => ({required Object seconds}) => '後退 ${seconds} 秒', @@ -2698,8 +3231,6 @@ extension on TranslationsZhHant { 'videoControls.subtitleDownloaded' => '字幕下載成功', 'videoControls.subtitleDownloadedNotApplied' => '字幕已下載,但無法套用', 'videoControls.subtitleDownloadFailed' => '字幕下載失敗', - _ => null, - } ?? switch (path) { 'videoControls.searchLanguages' => '搜尋語言…', 'messages.markedAsWatched' => '已標記為已觀看', 'messages.markedAsUnwatched' => '已標記為未觀看', @@ -2709,6 +3240,7 @@ extension on TranslationsZhHant { 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '已自動移除 ${n} 個已觀看的下載內容', ), 'messages.removedFromContinueWatching' => '已從「繼續觀看」中移除', 'messages.errorLoading' => ({required Object error}) => '錯誤:${error}', + 'messages.searchPartialResults' => '部分媒體伺服器無法搜尋。目前顯示可取得的結果。', 'messages.streamInterrupted' => '影片串流中斷。請按播放鍵或拖動進度條重試。', 'messages.liveStreamInterrupted' => '直播串流中斷。請按播放鍵重試。', 'messages.fileInfoNotAvailable' => '無法取得檔案資訊', @@ -2747,6 +3279,8 @@ extension on TranslationsZhHant { 'messages.switchingToCompatiblePlayer' => '正在切換至相容的播放器…', 'messages.serverLimitTitle' => '播放失敗', 'messages.serverLimitBody' => '伺服器錯誤(HTTP 500)。伺服器的頻寬或轉碼限制可能拒絕此播放要求。請聯絡伺服器擁有者調整設定。', + 'messages.mediaUnreadableTitle' => '檔案無法使用', + 'messages.mediaUnreadableBody' => '伺服器找到了此項目,但無法讀取其檔案(HTTP 404)。檔案可能已移動、刪除,或其儲存空間離線。請聯絡伺服器擁有者檢查檔案並重新掃描媒體庫。', 'messages.logsUploaded' => '日誌已上傳', 'messages.logsUploadFailed' => '上傳日誌失敗', 'messages.logId' => '日誌 ID', @@ -2855,6 +3389,8 @@ extension on TranslationsZhHant { 'connections.sessionExpiredOne' => ({required Object name}) => '${name} 的工作階段已過期', 'connections.sessionExpiredMany' => ({required Object count}) => '${count} 個伺服器的工作階段已過期', 'connections.signInAgain' => '重新登入', + 'connections.editMediaBrowserTitle' => ({required Object product}) => '編輯 ${product} 連線', + 'connections.editMediaBrowserIntro' => ({required Object serverName}) => '為 ${serverName} 新增或移除 URL。Plezy 將使用延遲最低且可連線的 URL。', 'discover.title' => '發現', 'discover.noContentAvailable' => '沒有可用內容', 'discover.addMediaToLibraries' => '請向您的媒體庫新增一些媒體內容', @@ -2880,6 +3416,7 @@ extension on TranslationsZhHant { 'discover.minutesLeft' => ({required Object minutes}) => '剩餘 ${minutes} 分鐘', 'discover.moreLikeThis' => '更多類似內容', 'errors.searchFailed' => ({required Object error}) => '搜尋失敗:${error}', + 'errors.searchUnavailable' => '搜尋無法連線至任何媒體伺服器。', 'errors.connectionTimeout' => ({required Object context}) => '載入 ${context} 時連線逾時', 'errors.connectionFailed' => '無法連線至媒體伺服器', 'errors.unableToLoad' => ({required Object context}) => '無法載入 ${context}。請重試。', @@ -2987,6 +3524,36 @@ extension on TranslationsZhHant { 'logs.clearLogs' => '清除日誌', 'logs.copyLogs' => '複製日誌', 'logs.uploadLogs' => '上傳日誌', + 'startup.failedTitle' => 'Plezy 無法啟動', + 'startup.failedBody' => '啟動期間發生問題。下方詳細資料可識別失敗的原因。', + 'startup.failedBodyRepairable' => 'Plezy 儲存的設定檔已損壞,必須先重建才能啟動。重試無法解決問題 — 請選擇「修復儲存空間」。', + 'startup.phaseLabel' => '步驟', + 'startup.showDetails' => '顯示詳細資料', + 'startup.hideDetails' => '隱藏詳細資料', + 'startup.copyDetails' => '複製詳細資料', + 'startup.detailsCopied' => '詳細資料已複製到剪貼簿', + 'startup.uploadDetails' => '上傳詳細資料', + 'startup.repairStorage' => '修復儲存空間', + 'startup.repairTitle' => '修復已儲存的資料?', + 'startup.repairBodyCommon' => 'Plezy 的設定檔已損壞且無法讀取。修復會將所有設定重設為預設值。', + 'startup.repairBodyOneCredential' => '有一筆已儲存的登入資訊損壞且無法讀取。修復僅會移除該筆資訊,其他設定將保持不變。', + 'startup.repairBodySignInsKept' => '您的伺服器與使用者設定檔應可保持登入狀態。', + 'startup.repairBodySignInsLost' => '保護已儲存登入資訊的金鑰無法從此檔案中復原,因此您必須重新登入每個伺服器與使用者設定檔。您媒體伺服器上的內容不受影響。', + 'startup.repairBodySessionsUncertain' => '追蹤服務(MAL、AniList、Simkl、Trakt)與 Seerr 分別儲存,可能保留也可能遺失。Plezy 會明確告知保留了哪些項目。', + 'startup.repairConfirm' => '修復', + 'startup.repairSucceeded' => '儲存空間已修復', + 'startup.repairNeedsRestart' => '儲存空間已修復 — 需要重新啟動', + 'startup.restartRequiredBody' => '您的資料已修復,但 Plezy 必須重新啟動才能使用。請關閉 Plezy 後重新開啟。', + 'startup.quitPlezy' => '退出 Plezy', + 'startup.repairFailed' => '修復失敗', + 'startup.repairKeptSignIns' => '您的伺服器與使用者設定檔仍保持登入狀態。', + 'startup.repairLostSignIns' => '保護已儲存登入資訊的金鑰無法復原。您必須重新登入每個伺服器與使用者設定檔。', + 'startup.repairLostSessions' => '至少一個追蹤服務或 Seerr 連線已遺失,必須重新連線。', + 'startup.backupTitle' => '已保留損壞檔案的副本', + 'startup.backupWarning' => '其中包含您的登入憑證。請勿上傳或分享。', + 'startup.deleteBackup' => '刪除副本', + 'startup.backupDeleted' => '副本已刪除。', + 'startup.previousFailureTitle' => 'Plezy 上次啟動失敗', 'licenses.relatedPackages' => '相關套件', 'licenses.license' => '授權', 'licenses.licenseNumber' => ({required Object number}) => '授權條款 ${number}', @@ -3030,6 +3597,113 @@ extension on TranslationsZhHant { 'explore.searchEmpty' => ({required Object query}) => '沒有「${query}」的結果', 'explore.searchPrompt' => ({required Object source}) => '在 ${source} 搜尋電影與影集。', 'explore.searchFailed' => '搜尋失敗。請檢查網路連線後重試。', + 'explore.badge.rankPopular' => ({required Object n}) => '#${n} 熱門', + 'explore.badge.rankAiring' => ({required Object n}) => '#${n} 播出中', + 'explore.badge.rankRated' => ({required Object n}) => '#${n} 高分', + 'explore.badge.rankFavorited' => ({required Object n}) => '#${n} 最多收藏', + 'explore.badge.rankTrending' => ({required Object n}) => '#${n} 趨勢', + 'explore.badge.rankSeasonal' => ({required Object n, required Object season}) => '#${n} · ${season}', + 'explore.badge.watchingNow' => ({required Object n}) => '${n} 觀看中', + 'explore.badge.available' => '可觀看', + 'explore.badge.partiallyAvailable' => '部分可觀看', + 'explore.badge.availableIn4k' => '4K 可觀看', + 'explore.badge.requested' => '已提出請求', + 'explore.badge.pendingApproval' => '等待核准', + 'explore.badge.processing' => '處理中', + 'explore.badge.declined' => '已拒絕', + _ => null, + } ?? switch (path) { + 'explore.badge.requestFailed' => '請求失敗', + 'explore.badge.requested4k' => '已請求 4K', + 'explore.badge.seasonsAvailable' => ({required Object available, required Object total}) => '${available}/${total} 季', + 'explore.badge.nextEpisodeIn' => ({required Object episode, required Object duration}) => '第 ${episode} 集 ${duration} 後播出', + 'explore.badge.nextAiringIn' => ({required Object duration}) => '${duration} 後播出', + 'explore.badge.episodesShort' => ({required Object n}) => '${n} 集', + 'explore.badge.minutesPerEpisode' => ({required Object n}) => '每集 ${n} 分鐘', + 'explore.badge.adult' => '18+', + 'explore.stats.listed' => ({required Object n}) => '${n} 人已收錄', + 'explore.stats.viewersDay' => ({required Object n}) => '今日 ${n} 人觀看', + 'explore.stats.viewersWeek' => ({required Object n}) => '本週 ${n} 人觀看', + 'explore.stats.viewersMonth' => ({required Object n}) => '本月 ${n} 人觀看', + 'explore.stats.viewersYear' => ({required Object n}) => '今年 ${n} 人觀看', + 'explore.stats.viewersAllTime' => ({required Object n}) => '累計 ${n} 人觀看', + 'explore.stats.planning' => ({required Object n}) => '${n} 人打算觀看', + 'explore.stats.favorited' => ({required Object n}) => '${n} 人收藏', + 'explore.stats.dropRate' => ({required Object percent}) => '${percent} 的人棄番', + 'explore.stats.comments' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '${n} 則留言', ), + 'explore.stats.votes' => ({required Object n}) => '${n} 票', + 'explore.stats.watching' => ({required Object n}) => '${n} 人正在觀看', + 'explore.stats.completed' => ({required Object n}) => '${n} 人已看完', + 'explore.stats.onHold' => ({required Object n}) => '${n} 人擱置中', + 'explore.stats.dropped' => ({required Object n}) => '${n} 人棄番', + 'explore.season.winter' => '冬季', + 'explore.season.spring' => '春季', + 'explore.season.summer' => '夏季', + 'explore.season.fall' => '秋季', + 'explore.season.withYear' => ({required Object season, required Object year}) => '${season} ${year} 年', + 'explore.format.tv' => 'TV', + 'explore.format.tvShort' => 'TV 短片', + 'explore.format.movie' => '電影', + 'explore.format.special' => '特別篇', + 'explore.format.ova' => 'OVA', + 'explore.format.ona' => 'ONA', + 'explore.format.music' => '音樂', + 'explore.format.other' => '其他', + 'explore.sourceMaterial.original' => '原創', + 'explore.sourceMaterial.manga' => '漫畫', + 'explore.sourceMaterial.lightNovel' => '輕小說', + 'explore.sourceMaterial.novel' => '小說', + 'explore.sourceMaterial.visualNovel' => '視覺小說', + 'explore.sourceMaterial.game' => '遊戲', + 'explore.sourceMaterial.webComic' => '網路漫畫', + 'explore.sourceMaterial.musicRelease' => '音樂', + 'explore.sourceMaterial.otherMedia' => '其他', + 'explore.creditRole.director' => '導演', + 'explore.creditRole.writer' => '編劇', + 'explore.creditRole.producer' => '製作人', + 'explore.creditRole.creator' => '原作者', + 'explore.creditRole.composer' => '作曲家', + 'explore.relation.prequel' => '前傳', + 'explore.relation.sequel' => '續集', + 'explore.relation.sideStory' => '外傳', + 'explore.relation.spinOff' => '衍生作品', + 'explore.relation.alternativeVersion' => '其他版本', + 'explore.relation.summary' => '總集篇', + 'explore.relation.parentStory' => '原作', + 'explore.relation.adaptation' => '改編', + 'explore.relation.other' => '相關', + 'explore.broadcast' => ({required Object day, required Object time}) => '${day} ${time} 播出', + 'explore.broadcastWithZone' => ({required Object day, required Object time, required Object timezone}) => '${day} ${time} ${timezone} 播出', + 'explore.detail.originalTitle' => '原始標題', + 'explore.detail.alsoKnownAs' => '又名', + 'explore.detail.studios' => '製作公司', + 'explore.detail.country' => '國家', + 'explore.detail.language' => '語言', + 'explore.detail.released' => '發行日期', + 'explore.detail.physicalRelease' => '光碟發行', + 'explore.detail.ended' => '已完結', + 'explore.detail.addedOn' => ({required Object date}) => '新增於 ${date}', + 'explore.detail.yourRating' => '您的評分', + 'explore.detail.budget' => '預算', + 'explore.detail.revenue' => '票房', + 'explore.detail.contentAdvisory' => '年齡分級', + 'explore.detail.tags' => '標籤', + 'explore.detail.revealSpoilerTags' => '顯示劇透標籤', + 'explore.detail.links' => '連結', + 'explore.detail.watchOn' => '觀看平台', + 'explore.detail.watchTrailer' => '觀看預告片', + 'explore.detail.openOn' => ({required Object site}) => '在 ${site} 開啟', + 'explore.detail.crew' => '幕後團隊', + 'explore.detail.ratings' => '評分', + 'explore.detail.schedule' => '播出時間', + 'explore.detail.recommendedByUsers' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '${n} 位使用者推薦', ), + 'explore.detail.recommendedBy' => ({required Object who}) => '由 ${who} 推薦', + 'explore.detail.favoritedBy' => ({required Object who}) => '由 ${who} 收藏', + 'explore.detail.unairedEpisodes' => ({required Object n}) => '尚有 ${n} 集未播出', + 'explore.detail.recommendedByPercent' => ({required Object percent}) => '${percent} 的觀眾推薦', + 'explore.detail.relatedTitles' => '相關作品', + 'explore.detail.background' => '背景介紹', + 'explore.totalResults' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: '${n} 筆結果', ), 'liveTv.title' => '直播電視', 'liveTv.guide' => '節目表指南', 'liveTv.noChannels' => '沒有可用的頻道', @@ -3212,8 +3886,6 @@ extension on TranslationsZhHant { 'watchTogether.relayUnreachable' => '無法連線至中繼伺服器。ISP 封鎖可能會導致「一起看」無法使用。', 'watchTogether.reconnectingToHost' => '正在重新連線至主持人…', 'watchTogether.currentPlayback' => '目前播放內容', - _ => null, - } ?? switch (path) { 'watchTogether.joinCurrentPlayback' => '加入目前播放點', 'watchTogether.joinCurrentPlaybackDescription' => '同步至主持人目前的觀看進度', 'watchTogether.failedToOpenCurrentPlayback' => '無法開啟目前播放點', @@ -3282,9 +3954,15 @@ extension on TranslationsZhHant { 'downloads.editSyncRule' => '編輯同步規則', 'downloads.removeSyncRule' => '刪除同步規則', 'downloads.removeSyncRuleConfirm' => ({required Object title}) => '停止同步「${title}」?已下載的單集將會保留。', + 'downloads.removeListSyncRuleConfirm' => ({required Object title}) => '停止同步「${title}」?', + 'downloads.deleteSyncRuleDownloads' => '一併刪除相關的下載內容', + 'downloads.deleteSyncRuleDownloadsDescription' => '供其他同步規則或使用者設定檔使用的下載內容將予以保留。', 'downloads.syncRuleCreated' => ({required Object count}) => '同步規則已建立 — 將保留 ${count} 個未觀看單集', 'downloads.syncRuleUpdated' => '同步規則已更新', 'downloads.syncRuleRemoved' => '同步規則已刪除', + 'downloads.syncRuleAndDownloadsRemoved' => '同步規則與相關的下載內容已刪除', + 'downloads.syncRuleCleanupBusy' => '同步規則正在更新中。請稍後再試。', + 'downloads.syncRuleCleanupUnavailable' => '無法安全地識別相關的下載內容。請重新連線伺服器後再試,或在不刪除下載內容的情況下移除規則。', 'downloads.syncedNewEpisodes' => ({required Object title, required Object count}) => '已為 ${title} 同步 ${count} 個新單集', 'downloads.activeSyncRules' => '同步規則', 'downloads.noSyncRules' => '沒有同步規則', @@ -3447,6 +4125,8 @@ extension on TranslationsZhHant { 'performanceOverlay.dvRpus' => 'DV RPU 數', 'performanceOverlay.dvRpuAverage' => 'DV RPU 平均', 'performanceOverlay.dvSampleAverage' => 'DV 取樣平均', + _ => null, + } ?? switch (path) { 'performanceOverlay.maxLuma' => '最大亮度', 'performanceOverlay.minLuma' => '最小亮度', 'performanceOverlay.maxCll' => 'MaxCLL', @@ -3616,6 +4296,7 @@ extension on TranslationsZhHant { 'services.names.anilist' => 'AniList', 'services.names.simkl' => 'Simkl', 'services.names.seerr' => 'Seerr', + 'services.names.mdblist' => 'MDBList', 'services.deviceCode.title' => ({required Object service}) => '在 ${service} 啟用 Plezy', 'services.deviceCode.body' => ({required Object url}) => '請前往 ${url} 並輸入此代碼:', 'services.deviceCode.openToActivate' => ({required Object service}) => '開啟 ${service} 進行啟用', @@ -3639,9 +4320,12 @@ extension on TranslationsZhHant { 'services.libraryFilter.modeHintWhitelist' => '僅同步下方已勾選的媒體庫。', 'services.libraryFilter.libraries' => '媒體庫', 'services.libraryFilter.noLibraries' => '沒有可用的媒體庫', + 'addServer.addMediaBrowserTitle' => ({required Object product}) => '新增 ${product} 伺服器', 'addServer.serverUrls' => '伺服器 URL', 'addServer.serverUrlsHelper' => '可輸入多個連線網址,以逗號區隔。', 'addServer.findServer' => '尋找伺服器', + 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => '正在尋找本機的 ${product} 伺服器…', + 'addServer.localMediaBrowserServers' => ({required Object product}) => '本機的 ${product} 伺服器', 'addServer.username' => '使用者名稱', 'addServer.password' => '密碼', 'addServer.signIn' => '登入', @@ -3653,11 +4337,15 @@ extension on TranslationsZhHant { 'addServer.addPlexTitle' => '使用 Plex 登入', 'addServer.pinExpired' => 'PIN 碼在登入前已過期。請重試。', 'addServer.failedToRegisterAccount' => ({required Object error}) => '註冊帳戶失敗:${error}', + 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => '請輸入您的 ${product} 伺服器 URL', 'addServer.addConnectionTitle' => '新增連線', 'addServer.addConnectionTitleScoped' => ({required Object name}) => '新增連線至 ${name}', 'addServer.signInWithPlexCard' => '使用 Plex 登入', 'addServer.signInWithPlexCardSubtitle' => '授權此裝置。將會新增共享的伺服器連線。', 'addServer.signInWithPlexCardSubtitleScoped' => '授權 Plex 帳戶。Home 使用者會建立為個別的使用者設定檔。', + 'addServer.connectToMediaBrowserCard' => ({required Object product}) => '連線至 ${product}', + 'addServer.connectToMediaBrowserCardSubtitle' => '輸入您的伺服器 URL、使用者名稱與密碼。', + 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => '登入您的 ${product} 伺服器。將綁定至 ${name}。', 'addServer.borrowFromAnotherProfile' => '從另一個使用者設定檔共用', 'addServer.borrowFromAnotherProfileSubtitle' => '重複使用另一個使用者設定檔的連線資訊。受 PIN 碼保護的使用者設定檔需輸入 PIN 碼。', _ => null, diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index a795b361..0afc7f98 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Väntar på autentisering...\nLogga in från din webbläsare.", "useBrowser": "Använd webbläsare", "or": "eller", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "Anslut till ${product}", "useQuickConnect": "Använd Quick Connect", "quickConnectInstructions": "Öppna Quick Connect i Jellyfin och ange den här koden.", "quickConnectWaiting": "Väntar på godkännande…", @@ -66,17 +66,17 @@ "exitFullscreen": "Avsluta helskärm", "pressBackAgainToExit": "Tryck bakåt igen för att avsluta", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Kritiker", + "audience": "Publik", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes-kritiker", + "rottenTomatoesAudience": "Rotten Tomatoes-publik" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Mörkt", "oledTheme": "OLED", "libraryDensity": "Biblioteksdensitet", - "displayScale": "", + "displayScale": "Skalning", "compact": "Kompakt", "comfortable": "Luftig", "tvCornerSpotlightBackdrop": "Bakgrundsbild för utvalt innehåll i hörnet", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "Automatiskt (rekommenderas)", "bufferSizeWarning": "${heap} MB minne är tillgängligt. En buffert på ${size} MB kan påverka uppspelningen.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Uppspelningsbuffert", + "playbackBufferAuto": "Auto (rekommenderas)", + "playbackBufferLarge": "Stor", + "playbackBufferExtraLarge": "Extra stor", + "playbackBufferDescription": "Buffrar mer mot instabila anslutningar. Begränsas även av buffertstorleken.", "defaultQualityTitle": "Standardkvalitet", "musicQualityTitle": "Musikkvalitet", "subtitleStyling": "Utseende för undertexter", @@ -208,9 +208,9 @@ "debugLoggingDescription": "Aktivera detaljerad loggning för felsökning", "viewLogs": "Visa loggar", "viewLogsDescription": "Visa appens loggar", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "Rensa bildcache", + "clearImageCacheDescription": "Rensa cachad grafik och miniatyrer. Bilder kan laddas långsammare tills de hämtas igen.", + "clearImageCacheSuccess": "Bildcachen har rensats", "resetSettings": "Återställ inställningarna", "resetSettingsDescription": "Återställ standardinställningarna. Det går inte att ångra.", "resetSettingsSuccess": "Inställningarna har återställts", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Filinformation", - "overview": "", + "overview": "Översikt", "video": "Video", "audio": "Ljud", "subtitles": "Undertexter", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Inbäddade bilder", + "dataStreams": "Dataströmmar", + "lyrics": "Sångtexter", "file": "Fil", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Bilagor", + "delivery": "Leverans", + "versionCounter": "Version ${index} av ${count}", + "fileCounter": "Fil ${index} av ${count}", + "noStreams": "Servern rapporterade inga strömmar för den här filen.", + "copyPath": "Kopiera sökväg", + "pathCopied": "Filsökväg kopierad", "codec": "Kodek", - "codecTag": "", + "codecTag": "Codec-tagg", "resolution": "Upplösning", - "codedResolution": "", + "codedResolution": "Kodad upplösning", "bitrate": "Bithastighet", "frameRate": "Bildfrekvens", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Rotation", + "comment": "Kommentar", + "audioDescription": "Ljudbeskrivning", + "headerCompression": "Headerkomprimering", + "sidecarFile": "Sidecar-fil", + "transportTimestamp": "Transporttidsstämpel", + "displayOffset": "Visningsoffset", + "previewFailureCode": "Kod för förhandsgranskningsfel", + "previewRetries": "Omförsök för förhandsgranskning", "aspectRatio": "Bildförhållande", - "pixelAspectRatio": "", + "pixelAspectRatio": "Pixelförhållande", "profile": "Profil", - "level": "", + "level": "Nivå", "bitDepth": "Bitdjup", - "pixelFormat": "", + "pixelFormat": "Pixelformat", "colorSpace": "Färgrymd", "colorRange": "Färgområde", "colorPrimaries": "Färgprimärer", - "colorTransfer": "", + "colorTransfer": "Färgöverföring", "chromaSubsampling": "Krominansnedsampling", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Kroma-placering", + "scanType": "Skanningsläge", + "interlaced": "Interlaced", + "anamorphic": "Anamorfisk", + "referenceFrames": "Referensbildrutor", + "dynamicRange": "Dynamiskt omfång", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision-nivå", + "dolbyVisionVersion": "Dolby Vision-version", + "dolbyVisionLayers": "Dolby Vision-lager", + "baseLayerCompatibility": "Kompatibilitet för baslager", + "avcBitstream": "AVC-bitström", + "nalLengthSize": "NAL-längdstorlek", + "scalingMatrix": "Anpassad skalningsmatris", + "streamIdentifier": "Strömidentifierare", + "streamIndex": "Strömindex", + "streamId": "Ström-ID", + "language": "Språk", + "languageCode": "Språkkod", + "streamTitle": "Spårnamn", "channels": "Kanaler", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Samplingsfrekvens", + "spatialAudio": "Rumsligt ljud", + "textBased": "Textbaserad", + "subtitleFormat": "Sidecar-format", + "provider": "Leverantör", + "matchScore": "Matchningspoäng", + "externalDelivery": "Kan levereras separat", + "sidecarPath": "Sidecar-sökväg", + "sourceStream": "Kopierad från", + "temporary": "Tillfällig", + "timeBase": "Tidsbas", "overallBitrate": "Total bithastighet", "path": "Sökväg", - "fileName": "", + "fileName": "Filnamn", "size": "Storlek", - "totalSize": "", + "totalSize": "Total storlek", "container": "Container", "duration": "Varaktighet", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Förhandsgranskningsminiatyrer", + "previewIndex": "Förhandsgranskningsindex", + "packetLength": "Paketlängd", + "filePresent": "Fil finns", + "fileReadable": "Läsbar av servern", + "streamPath": "Strömsökväg", "optimizedForStreaming": "Optimerad för streaming", "has64bitOffsets": "64-bitars offsetvärden", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokoll", + "mediaType": "Mediatyp", + "sourceKind": "Källtyp", + "optimizedVersion": "Optimerad version", + "optimizationTarget": "Optimeringsmål", + "deletedAt": "Raderad", + "remoteSource": "Fjärrkälla", + "infiniteStream": "Oändlig ström", + "directPlay": "Direktuppspelning", + "directStream": "Direktströmning", + "transcoding": "Transkodning", + "etag": "ETag", + "versionId": "Versions-ID", + "fileId": "Fil-ID", + "defaultAudioTrack": "Standardljudspår", + "defaultSubtitleTrack": "Standardundertextspår", + "subtitlesOff": "Av", + "flagDefault": "Standard", + "flagForced": "Forcerad", + "flagSelected": "Vald", + "flagExternal": "Extern", + "flagHearingImpaired": "Hörselskadade", + "flagDub": "Dubbad", + "flagOriginal": "Original" }, "mediaMenu": { "markAsWatched": "Markera som sedd", @@ -524,35 +524,35 @@ "shufflePlay": "Blanda uppspelning", "shuffleNotAvailableOffline": "Blandad uppspelning är inte tillgänglig offline", "fileInfo": "Filinformation", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Ta bort avsnitt från servern", + "deleteSeasonFromServer": "Ta bort säsong från servern", + "deleteShowFromServer": "Ta bort serie från servern", + "deleteMovieFromServer": "Ta bort film från servern", + "deleteEpisodeTitle": "Ta bort det här avsnittet?", + "deleteSeasonTitle": "Ta bort den här säsongen?", + "deleteShowTitle": "Ta bort den här serien?", + "deleteMovieTitle": "Ta bort den här filmen?", + "deleteEpisodeConfirm": "Ta bort avsnitt", + "deleteSeasonConfirm": "Ta bort säsong", + "deleteShowConfirm": "Ta bort serie", + "deleteMovieConfirm": "Ta bort film", + "deleteAnyway": "Ta bort ändå", + "confirmDeleteTarget": "Ta bort ${title} permanent från servern?", "deleteMultipleWarning": "Detta omfattar alla avsnitt och deras filer.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Detta tar bort ${n} avsnitt i den, och dess fil.", + "other": "Detta tar bort alla ${n} avsnitt i den, och deras filer." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Detta objekt lagras som ${n} fil, som kommer att tas bort.", + "other": "Detta objekt lagras i ${n} filer, och alla kommer att tas bort." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} annat avsnitt lagras i samma fil och kommer också att tas bort:", + "other": "${n} andra avsnitt lagras i samma fil och kommer också att tas bort:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy kunde inte kontrollera vilka filer detta tar bort, så det kan ta bort mer än objektet ovan. Avbryt och försök igen, eller ta bort ändå.", + "deleteScopeUnverifiedNoFileInfo": "Din server tillhandahöll inte filinformation för detta objekt, så Plezy kan inte kontrollera vilka filer detta tar bort. Det kan ta bort mer än objektet ovan.", "mediaDeletedSuccessfully": "Medieobjektet har tagits bort", "mediaFailedToDelete": "Det gick inte att ta bort medieobjektet", "rate": "Betygsätt", @@ -628,9 +628,9 @@ "playNext": "Spela nästa", "playButton": "Spela", "pauseButton": "Pausa", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Pausad", + "playbackResumed": "Spelar", + "loadingVideo": "Laddar video", "showPlaybackControls": "Visa uppspelningskontroller", "hidePlaybackControls": "Dölj uppspelningskontroller", "seekBackwardButton": "Spola bakåt ${seconds} sekunder", @@ -702,7 +702,7 @@ }, "removedFromContinueWatching": "Borttagen från Fortsätt titta", "errorLoading": "Fel: ${error}", - "searchPartialResults": "", + "searchPartialResults": "Vissa mediaservrar kunde inte sökas. Visar tillgängliga resultat.", "streamInterrupted": "Strömmen avbröts. Tryck på uppspelning eller spola för att försöka igen.", "liveStreamInterrupted": "Liveströmmen avbröts. Tryck på uppspelning för att försöka igen.", "fileInfoNotAvailable": "Filinformation är inte tillgänglig", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Byter till kompatibel spelare...", "serverLimitTitle": "Uppspelningen misslyckades", "serverLimitBody": "Serverfel (HTTP 500). En bandbredds-/transkodningsgräns avvisade troligen sessionen. Be ägaren justera den.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Filen är otillgänglig", + "mediaUnreadableBody": "Servern hittade objektet men kunde inte läsa dess fil (HTTP 404). Filen har troligen flyttats, tagits bort eller så är dess lagring offline. Be serverägaren kontrollera filen och skanna om biblioteket.", "logsUploaded": "Loggarna har laddats upp", "logsUploadFailed": "Det gick inte att ladda upp loggarna", "logId": "Logg-ID" @@ -861,8 +861,8 @@ "sessionExpiredOne": "Sessionen har gått ut för ${name}", "sessionExpiredMany": "Sessionen har gått ut för ${count} servrar", "signInAgain": "Logga in igen", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "Redigera ${product}-anslutning", + "editMediaBrowserIntro": "Lägg till eller ta bort URL:er för ${serverName}. Plezy använder den nåbara URL:en med lägst latens." }, "discover": { "title": "Upptäck", @@ -892,7 +892,7 @@ }, "errors": { "searchFailed": "Sökningen misslyckades: ${error}", - "searchUnavailable": "", + "searchUnavailable": "Sökningen kunde inte nå någon medieserver.", "connectionTimeout": "Anslutningen tog för lång tid när ${context} lästes in", "connectionFailed": "Det gick inte att ansluta till medieservern", "unableToLoad": "Det gick inte att läsa in ${context}. Försök igen.", @@ -1020,36 +1020,36 @@ "uploadLogs": "Ladda upp loggar" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy kunde inte starta", + "failedBody": "Något gick fel under starten. Detaljerna nedan visar vad som misslyckades.", + "failedBodyRepairable": "Plezys sparade inställningsfil är skadad och måste byggas om innan Plezy kan starta. Att försöka igen hjälper inte — välj Reparera lagring.", + "phaseLabel": "Steg", + "showDetails": "Visa detaljer", + "hideDetails": "Dölj detaljer", + "copyDetails": "Kopiera detaljer", + "detailsCopied": "Detaljer kopierade till urklipp", + "uploadDetails": "Ladda upp detaljer", + "repairStorage": "Reparera lagring", + "repairTitle": "Reparera lagrade data?", + "repairBodyCommon": "Plezys inställningsfil är skadad och kan inte läsas. Reparationen återställer alla inställningar till standard.", + "repairBodyOneCredential": "En sparad inloggning är skadad och kan inte läsas. Reparationen tar bort endast den; dina andra inställningar lämnas orörda.", + "repairBodySignInsKept": "Dina servrar och profiler bör förbli inloggade.", + "repairBodySignInsLost": "Nyckeln som skyddar dina sparade inloggningar kan inte återställas från den här filen, så du måste logga in på varje server och profil igen. Inget på din medieserver påverkas.", + "repairBodySessionsUncertain": "Trackers (MAL, AniList, Simkl, Trakt) och Seerr lagras separat och kan överleva eller inte. Plezy berättar exakt vad som behållits.", + "repairConfirm": "Reparera", + "repairSucceeded": "Lagringen reparerad", + "repairNeedsRestart": "Lagringen reparerad — omstart krävs", + "restartRequiredBody": "Dina data reparerades, men Plezy måste starta om innan de kan användas. Stäng Plezy och öppna det igen.", + "quitPlezy": "Avsluta Plezy", + "repairFailed": "Reparationen misslyckades", + "repairKeptSignIns": "Dina servrar och profiler är fortfarande inloggade.", + "repairLostSignIns": "Nyckeln som skyddar dina sparade inloggningar kunde inte återställas. Du måste logga in på varje server och profil igen.", + "repairLostSessions": "Minst en tracker- eller Seerr-anslutning förlorades och måste återanslutas.", + "backupTitle": "En kopia av den skadade filen sparades", + "backupWarning": "Den innehåller dina inloggningsuppgifter. Ladda inte upp eller dela den.", + "deleteBackup": "Ta bort kopia", + "backupDeleted": "Kopian borttagen.", + "previousFailureTitle": "Plezy kunde inte starta förra gången" }, "licenses": { "relatedPackages": "Relaterade paket", @@ -1107,134 +1107,134 @@ "searchPrompt": "Sök efter filmer och serier på ${source}.", "searchFailed": "Sökningen misslyckades. Kontrollera din anslutning och försök igen.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} populär", + "rankAiring": "#${n} sänds nu", + "rankRated": "#${n} bäst betygsatta", + "rankFavorited": "#${n} mest favoritmarkerade", + "rankTrending": "#${n} trendar", + "rankSeasonal": "#${n} i ${season}", + "watchingNow": "${n} tittar nu", + "available": "Tillgänglig", + "partiallyAvailable": "Delvis tillgänglig", + "availableIn4k": "4K tillgängligt", + "requested": "Begärd", + "pendingApproval": "Väntar på godkännande", + "processing": "Bearbetas", + "declined": "Avvisad", + "requestFailed": "Begäran misslyckades", + "requested4k": "4K begärd", + "seasonsAvailable": "${available}/${total} säsonger", + "nextEpisodeIn": "Avsnitt ${episode} om ${duration}", + "nextAiringIn": "Nästa om ${duration}", + "episodesShort": "${n} avsn.", + "minutesPerEpisode": "${n} min/avsn", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} listade", + "viewersDay": "${n} tittade idag", + "viewersWeek": "${n} tittade denna vecka", + "viewersMonth": "${n} tittade denna månad", + "viewersYear": "${n} tittade i år", + "viewersAllTime": "${n} tittare", + "planning": "${n} planerar att titta", + "favorited": "${n} favoriter", + "dropRate": "${percent} hoppade av", "comments": { - "one": "", - "other": "" + "one": "${n} kommentar", + "other": "${n} kommentarer" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} röster", + "watching": "${n} tittar på den", + "completed": "${n} avslutade", + "onHold": "${n} på paus", + "dropped": "${n} hoppade av" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Vinter", + "spring": "Vår", + "summer": "Sommar", + "fall": "Höst", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV-short", + "movie": "Film", + "special": "Special", + "ova": "OVA", + "ona": "ONA", + "music": "Musik", + "other": "Annat" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Original", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Visual novel", + "game": "Spel", + "webComic": "Webbserie", + "musicRelease": "Musik", + "otherMedia": "Annat" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Regissör", + "writer": "Författare", + "producer": "Producent", + "creator": "Skapare", + "composer": "Kompositör" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Uppföljare", + "sideStory": "Bihistoria", + "spinOff": "Spin-off", + "alternativeVersion": "Alternativ version", + "summary": "Sammanfattning", + "parentStory": "Huvudberättelse", + "adaptation": "Adaption", + "other": "Relaterat" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "Sänds ${day} kl. ${time}", + "broadcastWithZone": "Sänds ${day} kl. ${time} ${timezone}", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Originaltitel", + "alsoKnownAs": "Även känd som", + "studios": "Studior", + "country": "Land", + "language": "Språk", + "released": "Släppt", + "physicalRelease": "På skiva", + "ended": "Avslutad", + "addedOn": "Tillagd ${date}", + "yourRating": "Ditt betyg", + "budget": "Budget", + "revenue": "Box office", + "contentAdvisory": "Åldersvägledning", + "tags": "Taggar", + "revealSpoilerTags": "Visa spoiler-taggar", + "links": "Länkar", + "watchOn": "Titta på", + "watchTrailer": "Titta på trailer", + "openOn": "Öppna på ${site}", + "crew": "Besättning", + "ratings": "Betyg", + "schedule": "Schema", "recommendedByUsers": { - "one": "", - "other": "" + "one": "Rekommenderad av ${n} användare", + "other": "Rekommenderad av ${n} användare" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "Rekommenderad av ${who}", + "favoritedBy": "Favoritmarkerad av ${who}", + "unairedEpisodes": "${n} inte sända ännu", + "recommendedByPercent": "Rekommenderad av ${percent} av tittarna", + "relatedTitles": "Relaterade titlar", + "background": "Bakgrund" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} resultat", + "other": "${n} resultat" } }, "liveTv": { @@ -1501,15 +1501,15 @@ "editSyncRule": "Redigera synkregel", "removeSyncRule": "Ta bort synkregel", "removeSyncRuleConfirm": "Sluta synkronisera \"${title}\"? Nedladdade avsnitt behålls.", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "Sluta synkronisera \"${title}\"?", + "deleteSyncRuleDownloads": "Ta även bort associerade nedladdningar", + "deleteSyncRuleDownloadsDescription": "Nedladdningar som används av en annan synkregel eller profil behålls.", "syncRuleCreated": "Synkregel skapad — behåller ${count} osedda avsnitt", "syncRuleUpdated": "Synkregel uppdaterad", "syncRuleRemoved": "Synkregel borttagen", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "Synkregel och associerade nedladdningar borttagna", + "syncRuleCleanupBusy": "Synkregler uppdateras just nu. Försök igen om en liten stund.", + "syncRuleCleanupUnavailable": "Associerade nedladdningar kunde inte identifieras på ett säkert sätt. Återanslut servern och försök igen, eller ta bort regeln utan att ta bort nedladdningar.", "syncedNewEpisodes": "Synkroniserade ${count} nya avsnitt för ${title}", "activeSyncRules": "Synkregler", "noSyncRules": "Inga synkregler", @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Aktivera Plezy på ${service}", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "Lägg till ${product}-server", "serverUrls": "Server-URL:er", "serverUrlsHelper": "Du kan ange flera URL:er avgränsade med kommatecken.", "findServer": "Hitta server", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Söker efter lokala ${product}-servrar...", + "localMediaBrowserServers": "Lokala ${product}-servrar", "username": "Användarnamn", "password": "Lösenord", "signIn": "Logga in", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Logga in med Plex", "pinExpired": "PIN-koden gick ut innan inloggning. Försök igen.", "failedToRegisterAccount": "Kunde inte registrera kontot: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "Ange din ${product}-server-URL", "addConnectionTitle": "Lägg till anslutning", "addConnectionTitleScoped": "Lägg till i ${name}", "signInWithPlexCard": "Logga in med Plex", "signInWithPlexCardSubtitle": "Auktorisera den här enheten. Delade servrar läggs till.", "signInWithPlexCardSubtitleScoped": "Auktorisera ett Plex-konto. Home-användare blir profiler.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "Anslut till ${product}", + "connectToMediaBrowserCardSubtitle": "Ange din server-URL, användarnamn och lösenord.", + "connectToMediaBrowserCardSubtitleScoped": "Logga in på din ${product}-server. Knyts till ${name}.", "borrowFromAnotherProfile": "Låna från en annan profil", "borrowFromAnotherProfileSubtitle": "Återanvänd en annan profils anslutning. PIN-skyddade profiler kräver en PIN." } diff --git a/lib/i18n/tr.i18n.json b/lib/i18n/tr.i18n.json index ae238449..cfaa18cd 100644 --- a/lib/i18n/tr.i18n.json +++ b/lib/i18n/tr.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Doğrulama bekleniyor...\nTarayıcınızdan giriş yapın.", "useBrowser": "Tarayıcı kullan", "or": "veya", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "${product} ile Bağlan", "useQuickConnect": "Hızlı Bağlantıyı Kullan", "quickConnectInstructions": "Jellyfin'de Hızlı Bağlantı'yı açın ve bu kodu girin.", "quickConnectWaiting": "Onay bekleniyor…", @@ -66,17 +66,17 @@ "exitFullscreen": "Tam Ekrandan Çık", "pressBackAgainToExit": "Çıkmak için tekrar geri tuşuna basın", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Eleştirmenler", + "audience": "İzleyiciler", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes eleştirmenleri", + "rottenTomatoesAudience": "Rotten Tomatoes izleyicileri" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Koyu", "oledTheme": "OLED", "libraryDensity": "Kitaplık Yoğunluğu", - "displayScale": "", + "displayScale": "Ekran ölçeği", "compact": "Sıkışık", "comfortable": "Rahat", "tvCornerSpotlightBackdrop": "Köşe Öne Çıkan Arka Plan", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "Otomatik (Önerilen)", "bufferSizeWarning": "${heap}MB bellek mevcut. ${size}MB arabellek oynatmayı etkileyebilir.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Oynatma Tamponu", + "playbackBufferAuto": "Otomatik (Önerilen)", + "playbackBufferLarge": "Büyük", + "playbackBufferExtraLarge": "Ekstra Büyük", + "playbackBufferDescription": "Kararsız bağlantılara karşı daha fazla tamponlar. Tampon Boyutu ile de sınırlıdır.", "defaultQualityTitle": "Varsayılan Kalite", "musicQualityTitle": "Müzik Kalitesi", "subtitleStyling": "Altyazı Biçimlendirmesi", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Dosya Bilgisi", - "overview": "", + "overview": "Genel Bakış", "video": "Video", "audio": "Ses", "subtitles": "Altyazılar", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Gömülü Görseller", + "dataStreams": "Veri Akışları", + "lyrics": "Şarkı Sözleri", "file": "Dosya", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Ekler", + "delivery": "Teslimat", + "versionCounter": "Sürüm ${index} / ${count}", + "fileCounter": "Dosya ${index} / ${count}", + "noStreams": "Sunucu bu dosya için hiçbir akış bildirmedi.", + "copyPath": "Yolu Kopyala", + "pathCopied": "Dosya yolu kopyalandı", "codec": "Kodek", - "codecTag": "", + "codecTag": "Codec Etiketi", "resolution": "Çözünürlük", - "codedResolution": "", + "codedResolution": "Kodlanmış Çözünürlük", "bitrate": "Bit Hızı (Bitrate)", "frameRate": "Kare Hızı", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Döndürme", + "comment": "Yorum", + "audioDescription": "Sesli Betimleme", + "headerCompression": "Başlık Sıkıştırması", + "sidecarFile": "Yan Dosya", + "transportTimestamp": "İletim Zaman Damgası", + "displayOffset": "Görüntü Ofseti", + "previewFailureCode": "Önizleme Hata Kodu", + "previewRetries": "Önizleme Denemeleri", "aspectRatio": "En Boy Oranı", - "pixelAspectRatio": "", + "pixelAspectRatio": "Piksel En Boy Oranı", "profile": "Profil", - "level": "", + "level": "Seviye", "bitDepth": "Bit Derinliği", - "pixelFormat": "", + "pixelFormat": "Piksel Biçimi", "colorSpace": "Renk Alanı", "colorRange": "Renk Aralığı", "colorPrimaries": "Ana Renkler", - "colorTransfer": "", + "colorTransfer": "Renk Aktarımı", "chromaSubsampling": "Renk Alt Örneklemesi", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Chroma Konumu", + "scanType": "Tarama Türü", + "interlaced": "Geçmeli", + "anamorphic": "Anamorfik", + "referenceFrames": "Referans Kareler", + "dynamicRange": "Dinamik Aralık", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision Seviyesi", + "dolbyVisionVersion": "Dolby Vision Sürümü", + "dolbyVisionLayers": "Dolby Vision Katmanları", + "baseLayerCompatibility": "Temel Katman Uyumluluğu", + "avcBitstream": "AVC Bit Akışı", + "nalLengthSize": "NAL Uzunluk Boyutu", + "scalingMatrix": "Özel Ölçekleme Matrisi", + "streamIdentifier": "Akış Tanımlayıcısı", + "streamIndex": "Akış Dizini", + "streamId": "Akış Kimliği", + "language": "Dil", + "languageCode": "Dil Kodu", + "streamTitle": "Parça Başlığı", "channels": "Kanallar", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Örnekleme Hızı", + "spatialAudio": "Uzamsal Ses", + "textBased": "Metin Tabanlı", + "subtitleFormat": "Yan Dosya Biçimi", + "provider": "Sağlayıcı", + "matchScore": "Eşleşme Puanı", + "externalDelivery": "Ayrı Olarak Sunulabilir", + "sidecarPath": "Yan Dosya Yolu", + "sourceStream": "Kopyalandığı Yer", + "temporary": "Geçici", + "timeBase": "Zaman Tabanı", "overallBitrate": "Genel Bit Hızı", "path": "Yol", - "fileName": "", + "fileName": "Dosya Adı", "size": "Boyut", - "totalSize": "", + "totalSize": "Toplam Boyut", "container": "Kapsayıcı", "duration": "Süre", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Önizleme Küçük Resimleri", + "previewIndex": "Önizleme Dizini", + "packetLength": "Paket Uzunluğu", + "filePresent": "Dosya Mevcut", + "fileReadable": "Sunucu Tarafından Okunabilir", + "streamPath": "Akış Yolu", "optimizedForStreaming": "Akış İçin Optimize Edilmiş", "has64bitOffsets": "64-bit Ofsetler", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokol", + "mediaType": "Medya Türü", + "sourceKind": "Kaynak Türü", + "optimizedVersion": "Optimize Edilmiş Sürüm", + "optimizationTarget": "Optimizasyon Hedefi", + "deletedAt": "Silindi", + "remoteSource": "Uzak Kaynak", + "infiniteStream": "Sonsuz Akış", + "directPlay": "Doğrudan Oynatma", + "directStream": "Doğrudan Akış", + "transcoding": "Kod Dönüştürme", + "etag": "ETag", + "versionId": "Sürüm Kimliği", + "fileId": "Dosya Kimliği", + "defaultAudioTrack": "Varsayılan Ses Parçası", + "defaultSubtitleTrack": "Varsayılan Altyazı Parçası", + "subtitlesOff": "Kapalı", + "flagDefault": "Varsayılan", + "flagForced": "Zorunlu", + "flagSelected": "Seçili", + "flagExternal": "Harici", + "flagHearingImpaired": "İşitme Engelliler İçin", + "flagDub": "Dublaj", + "flagOriginal": "Orijinal" }, "mediaMenu": { "markAsWatched": "İzlendi Olarak İşaretle", @@ -524,35 +524,35 @@ "shufflePlay": "Karışık Oynat", "shuffleNotAvailableOffline": "Karışık oynatma çevrimdışıyken kullanılamaz", "fileInfo": "Dosya Bilgisi", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Bölümü sunucudan sil", + "deleteSeasonFromServer": "Sezonu sunucudan sil", + "deleteShowFromServer": "Diziyi sunucudan sil", + "deleteMovieFromServer": "Filmi sunucudan sil", + "deleteEpisodeTitle": "Bu bölüm silinsin mi?", + "deleteSeasonTitle": "Bu sezon silinsin mi?", + "deleteShowTitle": "Bu dizi silinsin mi?", + "deleteMovieTitle": "Bu film silinsin mi?", + "deleteEpisodeConfirm": "Bölümü Sil", + "deleteSeasonConfirm": "Sezonu Sil", + "deleteShowConfirm": "Diziyi Sil", + "deleteMovieConfirm": "Filmi Sil", + "deleteAnyway": "Yine de Sil", + "confirmDeleteTarget": "${title} sunucunuzdan kalıcı olarak silinsin mi?", "deleteMultipleWarning": "Bu işlem tüm bölümleri ve dosyalarını içerir.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Bu, içindeki ${n} bölümü ve dosyasını siler.", + "other": "Bu, içindeki ${n} bölümü ve dosyalarını siler." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Bu öge ${n} dosya olarak saklanıyor ve silinecek.", + "other": "Bu öge ${n} dosyaya bölünmüş olarak saklanıyor ve hepsi silinecek." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "${n} başka bölüm aynı dosyada saklanıyor ve o da silinecek:", + "other": "${n} başka bölüm aynı dosyada saklanıyor ve onlar da silinecek:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy bunun hangi dosyaları sileceğini kontrol edemedi, bu yüzden yukarıda adı geçen ögeden daha fazlasını silebilir. İptal edip tekrar deneyin veya yine de silin.", + "deleteScopeUnverifiedNoFileInfo": "Sunucunuz bu öge için dosya ayrıntıları sağlamadı, bu yüzden Plezy bunun hangi dosyaları sileceğini kontrol edemiyor. Yukarıda adı geçen ögeden daha fazlasını silebilir.", "mediaDeletedSuccessfully": "Medya ögesi başarıyla silindi", "mediaFailedToDelete": "Medya ögesi silinemedi", "rate": "Oyla", @@ -628,9 +628,9 @@ "playNext": "Sonrakini Oynat", "playButton": "Oynat", "pauseButton": "Duraklat", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Duraklatıldı", + "playbackResumed": "Oynatılıyor", + "loadingVideo": "Video yükleniyor", "showPlaybackControls": "Oynatma kontrollerini göster", "hidePlaybackControls": "Oynatma kontrollerini gizle", "seekBackwardButton": "${seconds} saniye geri sar", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Uyumlu oynatıcıya geçiliyor...", "serverLimitTitle": "Oynatma başarısız oldu", "serverLimitBody": "Sunucu hatası (HTTP 500). Muhtemelen bir bant genişliği/kod dönüştürme sınırı bu oturumu reddetti. Sunucu sahibinden bunu ayarlamasını isteyin.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Dosya kullanılamıyor", + "mediaUnreadableBody": "Sunucu bu ögeyi buldu ancak dosyasını okuyamadı (HTTP 404). Dosya büyük olasılıkla taşındı, silindi veya depolama alanı çevrimdışı. Sunucu sahibinden dosyayı kontrol edip kitaplığı yeniden taramasını isteyin.", "logsUploaded": "Günlükler yüklendi", "logsUploadFailed": "Günlükler yüklenemedi", "logId": "Günlük Kimliği (ID)" @@ -861,8 +861,8 @@ "sessionExpiredOne": "${name} için oturum süresi doldu", "sessionExpiredMany": "${count} sunucu için oturum süresi doldu", "signInAgain": "Tekrar giriş yap", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "${product} bağlantısını düzenle", + "editMediaBrowserIntro": "${serverName} için URL ekleyin veya kaldırın. Plezy, erişilebilir olan en düşük gecikmeli URL'yi kullanacak." }, "discover": { "title": "Keşfet", @@ -1020,36 +1020,36 @@ "uploadLogs": "Günlükleri Yükle" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy başlatılamadı", + "failedBody": "Başlatma sırasında bir şeyler ters gitti. Aşağıdaki ayrıntılar neyin başarısız olduğunu gösteriyor.", + "failedBodyRepairable": "Plezy'nin kayıtlı ayar dosyası hasarlı ve Plezy başlamadan önce yeniden oluşturulması gerekiyor. Tekrar denemek işe yaramaz — Depolama Alanını Onar'ı seçin.", + "phaseLabel": "Adım", + "showDetails": "Ayrıntıları göster", + "hideDetails": "Ayrıntıları gizle", + "copyDetails": "Ayrıntıları kopyala", + "detailsCopied": "Ayrıntılar panoya kopyalandı", + "uploadDetails": "Ayrıntıları yükle", + "repairStorage": "Depolama Alanını Onar", + "repairTitle": "Kayıtlı veriler onarılsın mı?", + "repairBodyCommon": "Plezy'nin ayar dosyası hasarlı ve okunamıyor. Onarım, her ayarı varsayılanına sıfırlar.", + "repairBodyOneCredential": "Kayıtlı bir giriş hasarlı ve okunamıyor. Onarım yalnızca onu kaldırır; diğer ayarlarınıza dokunulmaz.", + "repairBodySignInsKept": "Sunucularınız ve profilleriniz giriş yapılı kalmalı.", + "repairBodySignInsLost": "Kayıtlı girişlerinizi koruyan anahtar bu dosyadan kurtarılamıyor, bu yüzden her sunucuya ve profile yeniden giriş yapmanız gerekecek. Medya sunucunuzdaki hiçbir şey etkilenmez.", + "repairBodySessionsUncertain": "Takip hizmetleri (MAL, AniList, Simkl, Trakt) ve Seerr ayrı olarak saklanır; korunup korunmayacakları belirsizdir. Plezy tam olarak neyi koruduğunu size söyleyecek.", + "repairConfirm": "Onar", + "repairSucceeded": "Depolama alanı onarıldı", + "repairNeedsRestart": "Depolama alanı onarıldı — yeniden başlatma gerekli", + "restartRequiredBody": "Verileriniz onarıldı, ancak Plezy'nin bunları kullanabilmesi için temiz bir başlangıç yapması gerekiyor. Plezy'yi kapatıp yeniden açın.", + "quitPlezy": "Plezy'den Çık", + "repairFailed": "Onarım başarısız oldu", + "repairKeptSignIns": "Sunucularınız ve profilleriniz hâlâ giriş yapılı.", + "repairLostSignIns": "Kayıtlı girişlerinizi koruyan anahtar kurtarılamadı. Her sunucuya ve profile yeniden giriş yapmanız gerekecek.", + "repairLostSessions": "En az bir takip hizmeti veya Seerr bağlantısı kayboldu ve yeniden bağlanması gerekiyor.", + "backupTitle": "Hasarlı dosyanın bir kopyası saklandı", + "backupWarning": "Giriş bilgilerinizi içerir. Yüklemeyin veya paylaşmayın.", + "deleteBackup": "Kopyayı Sil", + "backupDeleted": "Kopya silindi.", + "previousFailureTitle": "Plezy geçen sefer başlatılamadı" }, "licenses": { "relatedPackages": "İlgili Paketler", @@ -1107,134 +1107,134 @@ "searchPrompt": "${source} üzerinde film ve dizileri arayın.", "searchFailed": "Arama başarısız. Bağlantınızı kontrol edip tekrar deneyin.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "Popülerde #${n}", + "rankAiring": "Yayında #${n}", + "rankRated": "Puanlarda #${n}", + "rankFavorited": "Favorilerde #${n}", + "rankTrending": "Trendde #${n}", + "rankSeasonal": "#${n} ${season} sezonunda", + "watchingNow": "${n} izliyor", + "available": "Mevcut", + "partiallyAvailable": "Kısmen mevcut", + "availableIn4k": "4K mevcut", + "requested": "İstendi", + "pendingApproval": "Onay bekliyor", + "processing": "İşleniyor", + "declined": "Reddedildi", + "requestFailed": "İstek başarısız oldu", + "requested4k": "4K istendi", + "seasonsAvailable": "${available}/${total} sezon", + "nextEpisodeIn": "Bölüm ${episode}, ${duration} içinde", + "nextAiringIn": "Sıradaki ${duration} içinde", + "episodesShort": "${n} blm", + "minutesPerEpisode": "${n} dk/blm", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} listede", + "viewersDay": "${n} bugün izledi", + "viewersWeek": "${n} bu hafta izledi", + "viewersMonth": "${n} bu ay izledi", + "viewersYear": "${n} bu yıl izledi", + "viewersAllTime": "${n} izleyici", + "planning": "${n} izlemeyi planlıyor", + "favorited": "${n} favori", + "dropRate": "${percent} bıraktı", "comments": { - "one": "", - "other": "" + "one": "${n} yorum", + "other": "${n} yorum" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} oy", + "watching": "${n} izliyor", + "completed": "${n} tamamladı", + "onHold": "${n} bekletiyor", + "dropped": "${n} bıraktı" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Kış", + "spring": "İlkbahar", + "summer": "Yaz", + "fall": "Sonbahar", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV Kısa", + "movie": "Film", + "special": "Özel", + "ova": "OVA", + "ona": "ONA", + "music": "Müzik", + "other": "Diğer" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Orijinal", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Görsel roman", + "game": "Oyun", + "webComic": "Web çizgi romanı", + "musicRelease": "Müzik", + "otherMedia": "Diğer" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Yönetmen", + "writer": "Senarist", + "producer": "Yapımcı", + "creator": "Yaratıcı", + "composer": "Besteci" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prequel", + "sequel": "Sequel", + "sideStory": "Yan hikâye", + "spinOff": "Spin-off", + "alternativeVersion": "Alternatif versiyon", + "summary": "Özet", + "parentStory": "Ana hikâye", + "adaptation": "Uyarlama", + "other": "İlgili" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "${day} ${time} yayınlanır", + "broadcastWithZone": "${day} ${time} ${timezone} yayınlanır", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Orijinal başlık", + "alsoKnownAs": "Ayrıca bilinen adlar", + "studios": "Stüdyolar", + "country": "Ülke", + "language": "Dil", + "released": "Yayınlanma", + "physicalRelease": "Diskte", + "ended": "Sona erdi", + "addedOn": "${date} eklendi", + "yourRating": "Puanınız", + "budget": "Bütçe", + "revenue": "Gişe", + "contentAdvisory": "Yaş sınırı", + "tags": "Etiketler", + "revealSpoilerTags": "Spoiler etiketlerini göster", + "links": "Bağlantılar", + "watchOn": "İzle", + "watchTrailer": "Fragmanı izle", + "openOn": "${site}'de aç", + "crew": "Ekip", + "ratings": "Puanlar", + "schedule": "Yayın takvimi", "recommendedByUsers": { - "one": "", - "other": "" + "one": "${n} kullanıcı önerdi", + "other": "${n} kullanıcı önerdi" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "${who} tarafından önerildi", + "favoritedBy": "${who} tarafından favorilendi", + "unairedEpisodes": "${n} henüz yayınlanmadı", + "recommendedByPercent": "İzleyicilerin ${percent} tarafından önerildi", + "relatedTitles": "İlgili yapımlar", + "background": "Arka plan" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} sonuç", + "other": "${n} sonuç" } }, "liveTv": { @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Plezy'yi ${service} üzerinde etkinleştirin", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product} sunucusu ekle", "serverUrls": "Sunucu URL'leri", "serverUrlsHelper": "Virgülle ayrılmış birden fazla URL'ye izin verilir.", "findServer": "Sunucu bul", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Yerel ${product} sunucuları aranıyor...", + "localMediaBrowserServers": "Yerel ${product} sunucuları", "username": "Kullanıcı adı", "password": "Şifre", "signIn": "Giriş Yap", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Plex ile Giriş Yap", "pinExpired": "Giriş yapmadan önce PIN süresi doldu. Lütfen tekrar deneyin.", "failedToRegisterAccount": "Hesap kaydı başarısız oldu: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "${product} sunucu URL'nizi girin", "addConnectionTitle": "Bağlantı ekle", "addConnectionTitleScoped": "${name} profiline ekle", "signInWithPlexCard": "Plex ile Giriş Yap", "signInWithPlexCardSubtitle": "Bu cihazı yetkilendirin. Paylaşılan sunucular eklenir.", "signInWithPlexCardSubtitleScoped": "Bir Plex hesabını yetkilendirin. Ev kullanıcıları profile dönüşür.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "${product} ile Bağlan", + "connectToMediaBrowserCardSubtitle": "Sunucu URL'nizi, kullanıcı adınızı ve şifrenizi girin.", + "connectToMediaBrowserCardSubtitleScoped": "${product} sunucunuza giriş yapın. ${name} profiline bağlanır.", "borrowFromAnotherProfile": "Başka bir profilden ödünç al", "borrowFromAnotherProfileSubtitle": "Başka bir profilin bağlantısını yeniden kullanın. PIN korumalı profiller bir PIN gerektirir." } diff --git a/lib/i18n/uz.i18n.json b/lib/i18n/uz.i18n.json index 31b8760f..41bf40cb 100644 --- a/lib/i18n/uz.i18n.json +++ b/lib/i18n/uz.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "Tasdiqlanish kutilmoqda...\nBrauzeringizdan kiring.", "useBrowser": "Brauzerdan foydalanish", "or": "yoki", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "${product}ga ulanish", "useQuickConnect": "Tezkor ulanishdan foydalanish", "quickConnectInstructions": "Jellyfin-da Tezkor ulanishni oching va ushbu kodni kiriting.", "quickConnectWaiting": "Tasdiq kutilmoqda…", @@ -66,17 +66,17 @@ "exitFullscreen": "Toʻliq ekrandan chiqish", "pressBackAgainToExit": "Chiqish uchun orqaga tugmasini yana bir bor bosing", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "Tanqidchilar", + "audience": "Tomoshabinlar", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes tanqidchilari", + "rottenTomatoesAudience": "Rotten Tomatoes tomoshabinlari" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "Toʻq", "oledTheme": "OLED", "libraryDensity": "Kutubxona zichligi", - "displayScale": "", + "displayScale": "Ekran miqyosi", "compact": "Ixcham", "comfortable": "Qulay", "tvCornerSpotlightBackdrop": "Burchak yoritish foni", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "Avtomatik (Tavsiya etilgan)", "bufferSizeWarning": "${heap} MB Xotira mavjud. ${size} MB bufer ijroga taʼsir qilishi mumkin.", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "Ijro buferi", + "playbackBufferAuto": "Avto (tavsiya etiladi)", + "playbackBufferLarge": "Katta", + "playbackBufferExtraLarge": "Juda katta", + "playbackBufferDescription": "Beqaror ulanishlarga qarshi koʻproq buferlaydi. Bufer hajmi bilan ham cheklanadi.", "defaultQualityTitle": "Standart sifat", "musicQualityTitle": "Musiqa sifati", "subtitleStyling": "Subtitr sozlamalari", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "Fayl haqida maʼlumot", - "overview": "", + "overview": "Tavsif", "video": "Video", "audio": "Audio", "subtitles": "Subtitrlar", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "Ichiga joylangan rasmlar", + "dataStreams": "Maʼlumot oqimlari", + "lyrics": "Qoʻshiq matni", "file": "Fayl", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "Biriktirilgan fayllar", + "delivery": "Yetkazib berish", + "versionCounter": "${index}-versiya (${count} tadan)", + "fileCounter": "${index}-fayl (${count} tadan)", + "noStreams": "Server ushbu fayl uchun oqimlar mavjud emasligini bildirdi.", + "copyPath": "Yoʻlni nusxalash", + "pathCopied": "Fayl yoʻli nusxalandi", "codec": "Kodek", - "codecTag": "", + "codecTag": "Kodek yorligʻi", "resolution": "Oʻlchamlari (Resolution)", - "codedResolution": "", + "codedResolution": "Kodlangan oʻlcham", "bitrate": "Bitreyt (Bitrate)", "frameRate": "Kadrlar chastotasi", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "Burilish", + "comment": "Izoh", + "audioDescription": "Audio tavsif", + "headerCompression": "Sarlavha siqish", + "sidecarFile": "Yordamchi fayl", + "transportTimestamp": "Transport vaqt belgisi", + "displayOffset": "Koʻrsatish siljishi", + "previewFailureCode": "Oldindan koʻrish xatosi kodi", + "previewRetries": "Oldindan koʻrish urinishlari", "aspectRatio": "Tomonlar nisbati", - "pixelAspectRatio": "", + "pixelAspectRatio": "Piksel tomonlar nisbati", "profile": "Profil", - "level": "", + "level": "Daraja", "bitDepth": "Bit chuqurligi", - "pixelFormat": "", + "pixelFormat": "Piksel formati", "colorSpace": "Rang makoni", "colorRange": "Rang diapazoni", "colorPrimaries": "Asosiy ranglar", - "colorTransfer": "", + "colorTransfer": "Rang uzatish", "chromaSubsampling": "Rangli subdiskretlash", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "Chroma joylashuvi", + "scanType": "Skanerlash turi", + "interlaced": "Interleys", + "anamorphic": "Anamorfik", + "referenceFrames": "Tayanch kadrlar", + "dynamicRange": "Dinamik diapazon", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision darajasi", + "dolbyVisionVersion": "Dolby Vision versiyasi", + "dolbyVisionLayers": "Dolby Vision qatlamlari", + "baseLayerCompatibility": "Asosiy qatlam mosligi", + "avcBitstream": "AVC bit oqimi", + "nalLengthSize": "NAL uzunlik oʻlchami", + "scalingMatrix": "Maxsus masshtablash matritsasi", + "streamIdentifier": "Oqim identifikatori", + "streamIndex": "Oqim indeksi", + "streamId": "Oqim ID-si", + "language": "Til", + "languageCode": "Til kodi", + "streamTitle": "Trek nomi", "channels": "Kanallar", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "Namuna tezligi", + "spatialAudio": "Fazoviy audio", + "textBased": "Matnga asoslangan", + "subtitleFormat": "Yordamchi format", + "provider": "Provayder", + "matchScore": "Moslik darajasi", + "externalDelivery": "Alohida uzatilishi mumkin", + "sidecarPath": "Yordamchi fayl yoʻli", + "sourceStream": "Nusxa olingan manba", + "temporary": "Vaqtinchalik", + "timeBase": "Vaqt bazasi", "overallBitrate": "Umumiy bitreyt", "path": "Yoʻl", - "fileName": "", + "fileName": "Fayl nomi", "size": "Hajmi", - "totalSize": "", + "totalSize": "Umumiy hajm", "container": "Konteyner", "duration": "Davomiyligi", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "Oldindan koʻrish eskizlari", + "previewIndex": "Oldindan koʻrish indeksi", + "packetLength": "Paket uzunligi", + "filePresent": "Fayl mavjud", + "fileReadable": "Server tomonidan oʻqiladigan", + "streamPath": "Oqim yoʻli", "optimizedForStreaming": "Oqimli uzatish uchun optimallashtirilgan", "has64bitOffsets": "64-bitli siljishlar", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "Protokol", + "mediaType": "Media turi", + "sourceKind": "Manba turi", + "optimizedVersion": "Optimallashtirilgan versiya", + "optimizationTarget": "Optimallashtirish maqsadi", + "deletedAt": "Oʻchirilgan", + "remoteSource": "Masofaviy manba", + "infiniteStream": "Cheksiz oqim", + "directPlay": "Toʻgʻridan-toʻgʻri ijro", + "directStream": "Toʻgʻridan-toʻgʻri oqim", + "transcoding": "Qayta kodlash", + "etag": "ETag", + "versionId": "Versiya ID-si", + "fileId": "Fayl ID-si", + "defaultAudioTrack": "Standart audio trek", + "defaultSubtitleTrack": "Standart subtitr treki", + "subtitlesOff": "Oʻchirilgan", + "flagDefault": "Standart", + "flagForced": "Majburiy", + "flagSelected": "Tanlangan", + "flagExternal": "Tashqi", + "flagHearingImpaired": "Eshitishida nuqsoni borlar uchun", + "flagDub": "Dublyaj", + "flagOriginal": "Asl" }, "mediaMenu": { "markAsWatched": "Koʻrilgan deb belgilash", @@ -524,35 +524,35 @@ "shufflePlay": "Aralashtirib ijro etish", "shuffleNotAvailableOffline": "Aralashtirib ijro etish oflayn rejimda mavjud emas", "fileInfo": "Fayl haqida maʼlumot", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "Qismni serverdan oʻchirish", + "deleteSeasonFromServer": "Mavsumni serverdan oʻchirish", + "deleteShowFromServer": "Shouni serverdan oʻchirish", + "deleteMovieFromServer": "Filmni serverdan oʻchirish", + "deleteEpisodeTitle": "Ushbu qism oʻchirilsinmi?", + "deleteSeasonTitle": "Ushbu mavsum oʻchirilsinmi?", + "deleteShowTitle": "Ushbu shou oʻchirilsinmi?", + "deleteMovieTitle": "Ushbu film oʻchirilsinmi?", + "deleteEpisodeConfirm": "Qismni oʻchirish", + "deleteSeasonConfirm": "Mavsumni oʻchirish", + "deleteShowConfirm": "Shouni oʻchirish", + "deleteMovieConfirm": "Filmni oʻchirish", + "deleteAnyway": "Baribir oʻchirish", + "confirmDeleteTarget": "${title} serveringizdan butunlay oʻchirilsinmi?", "deleteMultipleWarning": "Bu barcha qismlar va fayllarga taʼsir qiladi.", "deleteEpisodeCountWarning": { - "one": "", - "other": "" + "one": "Bu undagi barcha ${n} qismni va uning faylini oʻchiradi.", + "other": "Bu undagi barcha ${n} qismni va ularning fayllarini oʻchiradi." }, "deleteMultiPartWarning": { - "one": "", - "other": "" + "one": "Bu element ${n} fayl shaklida saqlanadi va u oʻchiriladi.", + "other": "Bu element ${n} faylda saqlanadi va ularning barchasi oʻchiriladi." }, "deleteSharedFileHeading": { - "one": "", - "other": "" + "one": "Xuddi shu faylda yana ${n} qism saqlanadi va u ham oʻchiriladi:", + "other": "Xuddi shu faylda yana ${n} qism saqlanadi va ular ham oʻchiriladi:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy qaysi fayllar olib tashlanishini tekshira olmadi, shuning uchun u yuqorida koʻrsatilgan elementdan koʻproq narsani oʻchirishi mumkin. Bekor qilib qaytadan urining yoki baribir oʻchiring.", + "deleteScopeUnverifiedNoFileInfo": "Serveringiz ushbu element uchun fayl tafsilotlarini taqdim etmadi, shuning uchun Plezy qaysi fayllar olib tashlanishini tekshira olmaydi. U yuqorida koʻrsatilgan elementdan koʻproq narsani oʻchirishi mumkin.", "mediaDeletedSuccessfully": "Media elementi muvaffaqiyatli oʻchirildi", "mediaFailedToDelete": "Media elementini oʻchirib boʻlmadi", "rate": "Baho berish", @@ -628,9 +628,9 @@ "playNext": "Keyingisini ijro etish", "playButton": "Ijro etish", "pauseButton": "Pauza", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "Pauza", + "playbackResumed": "Ijro etilmoqda", + "loadingVideo": "Video yuklanmoqda", "showPlaybackControls": "Boshqaruv tugmalarini koʻrsatish", "hidePlaybackControls": "Boshqaruv tugmalarini yashirish", "seekBackwardButton": "${seconds} soniya orqaga oʻtkazish", @@ -741,8 +741,8 @@ "switchingToCompatiblePlayer": "Mos keluvchi pleyerga oʻtilmoqda...", "serverLimitTitle": "Ijro etishda xatolik", "serverLimitBody": "Server xatoligi (HTTP 500). Cheklov ushbu seansni rad etdi.", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "Fayl mavjud emas", + "mediaUnreadableBody": "Server bu elementni topdi, lekin uning faylini oʻqiy olmadi (HTTP 404). Fayl koʻchirilgan, oʻchirilgan yoki uning saqlash joyi oflayn boʻlishi mumkin. Server egasidan faylni tekshirishni va kutubxonani qayta skanerlashni soʻrang.", "logsUploaded": "Jurnallar yuklandi", "logsUploadFailed": "Jurnallarni yuklab boʻlmadi", "logId": "Jurnal ID-si" @@ -861,8 +861,8 @@ "sessionExpiredOne": "${name} uchun seans vaqti tugadi", "sessionExpiredMany": "${count} server uchun seans vaqti tugadi", "signInAgain": "Qaytadan kirish", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "${product} ulanishini tahrirlash", + "editMediaBrowserIntro": "${serverName} uchun URL-larni qoʻshing yoki olib tashlang. Plezy eng kam kechikishga ega boʻlgan mavjud URL-dan foydalanadi." }, "discover": { "title": "Kashf qilish", @@ -1020,36 +1020,36 @@ "uploadLogs": "Jurnallarni yuklash" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy ishga tusha olmadi", + "failedBody": "Ishga tushirish paytida nimadir xato ketdi. Quyidagi tafsilotlar aynan nima muvaffaqiyatsiz boʻlganini koʻrsatadi.", + "failedBodyRepairable": "Plezyning saqlangan sozlamalar fayli shikastlangan va Plezy ishga tushishidan oldin uni qayta tiklash kerak. Qayta urinish yordam bermaydi — Saqlashni tiklashni tanlang.", + "phaseLabel": "Qadam", + "showDetails": "Tafsilotlarni koʻrsatish", + "hideDetails": "Tafsilotlarni yashirish", + "copyDetails": "Tafsilotlarni nusxalash", + "detailsCopied": "Tafsilotlar buferga nusxalandi", + "uploadDetails": "Tafsilotlarni yuklash", + "repairStorage": "Saqlashni tiklash", + "repairTitle": "Saqlangan maʼlumotlar tikilsinmi?", + "repairBodyCommon": "Plezyning sozlamalar fayli shikastlangan va uni oʻqib boʻlmaydi. Tiklash barcha sozlamalarni standart holatiga qaytaradi.", + "repairBodyOneCredential": "Bitta saqlangan kirish maʼlumoti shikastlangan va uni oʻqib boʻlmaydi. Tiklash faqat uni olib tashlaydi; boshqa sozlamalaringizga tegilmaydi.", + "repairBodySignInsKept": "Serverlaringiz va profillaringiz tizimga kirgan holda qoladi.", + "repairBodySignInsLost": "Saqlangan kirish maʼlumotlaringizni himoya qiluvchi kalitni ushbu fayldan tiklab boʻlmaydi, shuning uchun har bir server va profilga qaytadan kirishingiz kerak boʻladi. Media serveringizdagi hech narsaga taʼsir qilmaydi.", + "repairBodySessionsUncertain": "Trekerlar (MAL, AniList, Simkl, Trakt) va Seerr alohida saqlanadi va ular saqlanib qolishi ham, yoʻqolishi ham mumkin. Plezy aynan nimani saqlaganini sizga xabar qiladi.", + "repairConfirm": "Tiklash", + "repairSucceeded": "Saqlash tiklandi", + "repairNeedsRestart": "Saqlash tiklandi — qayta ishga tushirish kerak", + "restartRequiredBody": "Maʼlumotlaringiz tiklandi, lekin Plezy ulardan foydalanishi uchun yangidan ishga tushishi kerak. Plezy-ni yoping va qayta oching.", + "quitPlezy": "Plezy-dan chiqish", + "repairFailed": "Tiklash amalga oshmadi", + "repairKeptSignIns": "Serverlaringiz va profillaringiz hali ham tizimga kirgan.", + "repairLostSignIns": "Saqlangan kirish maʼlumotlaringizni himoya qiluvchi kalitni tiklab boʻlmadi. Har bir server va profilga qaytadan kirishingiz kerak boʻladi.", + "repairLostSessions": "Kamida bitta treker yoki Seerr ulanishi yoʻqoldi va uni qayta ulash kerak.", + "backupTitle": "Shikastlangan faylning nusxasi saqlab qoʻyildi", + "backupWarning": "Unda kirish hisob maʼlumotlaringiz bor. Uni yuklamang yoki baham koʻrmang.", + "deleteBackup": "Nusxani oʻchirish", + "backupDeleted": "Nusxa oʻchirildi.", + "previousFailureTitle": "Plezy oxirgi marta ishga tushmadi" }, "licenses": { "relatedPackages": "Bogʻliq paketlar", @@ -1107,134 +1107,134 @@ "searchPrompt": "${source} orqali filmlar va seriallarni qidiring.", "searchFailed": "Qidiruv xatoligi. Ulanishni tekshiring.", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} mashhur", + "rankAiring": "#${n} efirda", + "rankRated": "#${n} baholangan", + "rankFavorited": "#${n} tanlanganlarga qoʻshilgan", + "rankTrending": "#${n} ommabop", + "rankSeasonal": "#${n} ${season} mavsumida", + "watchingNow": "${n} kishi tomosha qilmoqda", + "available": "Mavjud", + "partiallyAvailable": "Qisman mavjud", + "availableIn4k": "4K mavjud", + "requested": "Soʻralgan", + "pendingApproval": "Tasdiq kutilmoqda", + "processing": "Ishlanmoqda", + "declined": "Rad etilgan", + "requestFailed": "Soʻrov amalga oshmadi", + "requested4k": "4K soʻralgan", + "seasonsAvailable": "${available}/${total} mavsum", + "nextEpisodeIn": "${episode}-qism ${duration} ichida", + "nextAiringIn": "Keyingisi ${duration} ichida", + "episodesShort": "${n} qism", + "minutesPerEpisode": "${n} daq/qism", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} roʻyxatda", + "viewersDay": "Bugun ${n} kishi tomosha qildi", + "viewersWeek": "Bu hafta ${n} kishi tomosha qildi", + "viewersMonth": "Bu oy ${n} kishi tomosha qildi", + "viewersYear": "Bu yil ${n} kishi tomosha qildi", + "viewersAllTime": "${n} kishi tomosha qilgan", + "planning": "${n} kishi tomosha qilishni rejalashtirmoqda", + "favorited": "${n} ta tanlangan", + "dropRate": "${percent} tomosha qilishni toʻxtatgan", "comments": { - "one": "", - "other": "" + "one": "${n} ta izoh", + "other": "${n} ta izoh" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} ta ovoz", + "watching": "${n} kishi tomosha qilmoqda", + "completed": "${n} kishi yakunlagan", + "onHold": "${n} kishi toʻxtatib turibdi", + "dropped": "${n} kishi toʻxtatgan" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "Qish", + "spring": "Bahor", + "summer": "Yoz", + "fall": "Kuz", + "withYear": "${season} ${year}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "Qisqa TV", + "movie": "Film", + "special": "Maxsus", + "ova": "OVA", + "ona": "ONA", + "music": "Musiqa", + "other": "Boshqa" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "Asl", + "manga": "Manga", + "lightNovel": "Light novel", + "novel": "Roman", + "visualNovel": "Visual novel", + "game": "Oʻyin", + "webComic": "Veb-komiks", + "musicRelease": "Musiqa", + "otherMedia": "Boshqa" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "Rejissyor", + "writer": "Ssenarist", + "producer": "Prodyuser", + "creator": "Muallif", + "composer": "Bastakor" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "Prikvel", + "sequel": "Sikvel", + "sideStory": "Yon hikoya", + "spinOff": "Spin-off", + "alternativeVersion": "Muqobil versiya", + "summary": "Xulosa", + "parentStory": "Asosiy hikoya", + "adaptation": "Adaptatsiya", + "other": "Bogʻliq" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "${day} kuni soat ${time} da efirga uzatiladi", + "broadcastWithZone": "${day} kuni soat ${time} ${timezone} da efirga uzatiladi", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "Asl nomi", + "alsoKnownAs": "Boshqa nomi bilan ham tanilgan", + "studios": "Studiyalar", + "country": "Mamlakat", + "language": "Til", + "released": "Chiqarilgan", + "physicalRelease": "Diskda", + "ended": "Yakunlangan", + "addedOn": "${date} da qoʻshilgan", + "yourRating": "Sizning bahoyingiz", + "budget": "Byudjet", + "revenue": "Kassa yigʻimi", + "contentAdvisory": "Yosh cheklovi", + "tags": "Teglar", + "revealSpoilerTags": "Spoyler teglarini koʻrsatish", + "links": "Havolalar", + "watchOn": "Tomosha qilish", + "watchTrailer": "Treylerni koʻrish", + "openOn": "${site} da ochish", + "crew": "Jamoa", + "ratings": "Baholar", + "schedule": "Jadval", "recommendedByUsers": { - "one": "", - "other": "" + "one": "${n} foydalanuvchi tavsiya qilgan", + "other": "${n} foydalanuvchi tavsiya qilgan" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "${who} tavsiya qilgan", + "favoritedBy": "${who} tanlanganlarga qoʻshgan", + "unairedEpisodes": "${n} hali efirga chiqmagan", + "recommendedByPercent": "Tomoshabinlarning ${percent} tavsiya qilgan", + "relatedTitles": "Bogʻliq nomlar", + "background": "Orqa fon" }, "totalResults": { - "one": "", - "other": "" + "one": "${n} ta natija", + "other": "${n} ta natija" } }, "liveTv": { @@ -1874,7 +1874,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "Plezy-ni ${service} xizmatida faollashtiring", @@ -1907,12 +1907,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "${product} serverini qoʻshish", "serverUrls": "Server URL-lari", "serverUrlsHelper": "Vergul bilan ajratilgan bir nechta URL manziliga ruxsat beriladi.", "findServer": "Serverni topish", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "Mahalliy ${product} serverlari qidirilmoqda...", + "localMediaBrowserServers": "Mahalliy ${product} serverlari", "username": "Foydalanuvchi nomi", "password": "Parol", "signIn": "Kirish", @@ -1924,15 +1924,15 @@ "addPlexTitle": "Plex orqali kirish", "pinExpired": "PIN kod vaqti tugadi.", "failedToRegisterAccount": "Hisobni roʻyxatdan oʻtkazishda xatolik: ${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "${product} server URL-ini kiriting", "addConnectionTitle": "Ulanish qoʻshish", "addConnectionTitleScoped": "${name} profiliga qoʻshish", "signInWithPlexCard": "Plex orqali kirish", "signInWithPlexCardSubtitle": "Ushbu qurilmani avtorizatsiya qiling.", "signInWithPlexCardSubtitleScoped": "Plex hisobini avtorizatsiya qiling.", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "${product}ga ulanish", + "connectToMediaBrowserCardSubtitle": "Server URL-ini, foydalanuvchi nomini va parolni kiriting.", + "connectToMediaBrowserCardSubtitleScoped": "${product} serveringizga kiring. ${name} profiliga bogʻlanadi.", "borrowFromAnotherProfile": "Boshqa profildan olish", "borrowFromAnotherProfileSubtitle": "Boshqa profilning ulanishidan qayta foydalaning." } diff --git a/lib/i18n/zh-Hant.i18n.json b/lib/i18n/zh-Hant.i18n.json index d373eff6..45f52c6a 100644 --- a/lib/i18n/zh-Hant.i18n.json +++ b/lib/i18n/zh-Hant.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "正在等待驗證…\n請在瀏覽器中登入。", "useBrowser": "使用瀏覽器", "or": "或", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "連線至 ${product}", "useQuickConnect": "使用快速連線(Quick Connect)", "quickConnectInstructions": "在 Jellyfin 中開啟快速連線並輸入此代碼。", "quickConnectWaiting": "等待核准…", @@ -66,17 +66,17 @@ "exitFullscreen": "退出全螢幕", "pressBackAgainToExit": "再按一次返回以退出", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "影評人", + "audience": "觀眾", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes 影評人", + "rottenTomatoesAudience": "Rotten Tomatoes 觀眾" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "深色", "oledTheme": "OLED 純黑", "libraryDensity": "媒體庫版面配置密度", - "displayScale": "", + "displayScale": "介面縮放", "compact": "緊湊", "comfortable": "舒適", "tvCornerSpotlightBackdrop": "右上角焦點背景圖", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size} MB", "bufferSizeAuto": "自動(推薦)", "bufferSizeWarning": "可用記憶體為 ${heap} MB。設定 ${size} MB 緩衝可能影響播放穩定性。", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "播放緩衝", + "playbackBufferAuto": "自動(建議)", + "playbackBufferLarge": "大", + "playbackBufferExtraLarge": "特大", + "playbackBufferDescription": "針對不穩定的連線緩衝更多內容。也受緩衝大小限制。", "defaultQualityTitle": "預設畫質", "musicQualityTitle": "音樂品質", "subtitleStyling": "字幕樣式", @@ -208,9 +208,9 @@ "debugLoggingDescription": "啟用詳細日誌記錄以便進行疑難排解", "viewLogs": "查看日誌", "viewLogsDescription": "查看應用程式日誌記錄", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "清除圖片快取", + "clearImageCacheDescription": "清除已快取的封面圖片與縮圖。圖片在重新下載前載入速度可能較慢。", + "clearImageCacheSuccess": "圖片快取已成功清除", "resetSettings": "重設設定", "resetSettingsDescription": "恢復預設設定。此操作無法復原。", "resetSettingsSuccess": "設定重設成功", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "檔案資訊", - "overview": "", + "overview": "概述", "video": "影片", "audio": "音訊", "subtitles": "字幕", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "內嵌圖片", + "dataStreams": "資料串流", + "lyrics": "歌詞", "file": "檔案", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "附件", + "delivery": "傳輸方式", + "versionCounter": "第 ${index} 個版本,共 ${count} 個", + "fileCounter": "第 ${index} 個檔案,共 ${count} 個", + "noStreams": "伺服器回報此檔案沒有串流。", + "copyPath": "複製路徑", + "pathCopied": "已複製檔案路徑", "codec": "編解碼器", - "codecTag": "", + "codecTag": "編解碼器標籤", "resolution": "解析度", - "codedResolution": "", + "codedResolution": "編碼解析度", "bitrate": "位元率", "frameRate": "影格率", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "旋轉", + "comment": "註解", + "audioDescription": "口述影像", + "headerCompression": "標頭壓縮", + "sidecarFile": "附屬檔案", + "transportTimestamp": "傳輸時間戳記", + "displayOffset": "顯示偏移", + "previewFailureCode": "預覽失敗代碼", + "previewRetries": "預覽重試次數", "aspectRatio": "寬高比", - "pixelAspectRatio": "", + "pixelAspectRatio": "像素寬高比", "profile": "規格檔(Profile)", - "level": "", + "level": "等級", "bitDepth": "位元深度", - "pixelFormat": "", + "pixelFormat": "像素格式", "colorSpace": "色彩空間", "colorRange": "色彩範圍", "colorPrimaries": "色彩基色", - "colorTransfer": "", + "colorTransfer": "色彩轉換", "chromaSubsampling": "色度抽樣", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "色度位置", + "scanType": "掃描類型", + "interlaced": "交錯式", + "anamorphic": "變形寬銀幕", + "referenceFrames": "參考影格", + "dynamicRange": "動態範圍", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision 等級", + "dolbyVisionVersion": "Dolby Vision 版本", + "dolbyVisionLayers": "Dolby Vision 圖層", + "baseLayerCompatibility": "基礎圖層相容性", + "avcBitstream": "AVC 位元串流", + "nalLengthSize": "NAL 長度大小", + "scalingMatrix": "自訂縮放矩陣", + "streamIdentifier": "串流識別碼", + "streamIndex": "串流索引", + "streamId": "串流 ID", + "language": "語言", + "languageCode": "語言代碼", + "streamTitle": "軌道名稱", "channels": "聲道數", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "取樣率", + "spatialAudio": "空間音訊", + "textBased": "文字型", + "subtitleFormat": "附屬檔案格式", + "provider": "提供者", + "matchScore": "相符度", + "externalDelivery": "可分開傳送", + "sidecarPath": "附屬路徑", + "sourceStream": "複製來源", + "temporary": "暫時", + "timeBase": "時間基準", "overallBitrate": "總位元率", "path": "路徑", - "fileName": "", + "fileName": "檔案名稱", "size": "大小", - "totalSize": "", + "totalSize": "總大小", "container": "封裝格式", "duration": "長度", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "預覽縮圖", + "previewIndex": "預覽索引", + "packetLength": "封包長度", + "filePresent": "檔案存在", + "fileReadable": "伺服器可讀取", + "streamPath": "串流路徑", "optimizedForStreaming": "已最佳化串流播放", "has64bitOffsets": "具 64 位元偏移量", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "通訊協定", + "mediaType": "媒體類型", + "sourceKind": "來源類型", + "optimizedVersion": "最佳化版本", + "optimizationTarget": "最佳化目標", + "deletedAt": "已刪除", + "remoteSource": "遠端來源", + "infiniteStream": "無限串流", + "directPlay": "直接播放", + "directStream": "直接串流", + "transcoding": "轉碼", + "etag": "ETag", + "versionId": "版本 ID", + "fileId": "檔案 ID", + "defaultAudioTrack": "預設音軌", + "defaultSubtitleTrack": "預設字幕軌", + "subtitlesOff": "關閉", + "flagDefault": "預設", + "flagForced": "強制", + "flagSelected": "已選取", + "flagExternal": "外部", + "flagHearingImpaired": "聽障輔助", + "flagDub": "配音", + "flagOriginal": "原音" }, "mediaMenu": { "markAsWatched": "標記為已觀看", @@ -524,32 +524,32 @@ "shufflePlay": "隨機播放", "shuffleNotAvailableOffline": "離線時無法隨機播放", "fileInfo": "檔案資訊", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "從伺服器刪除單集", + "deleteSeasonFromServer": "從伺服器刪除季", + "deleteShowFromServer": "從伺服器刪除影集", + "deleteMovieFromServer": "從伺服器刪除電影", + "deleteEpisodeTitle": "刪除此單集?", + "deleteSeasonTitle": "刪除此季?", + "deleteShowTitle": "刪除此影集?", + "deleteMovieTitle": "刪除此電影?", + "deleteEpisodeConfirm": "刪除單集", + "deleteSeasonConfirm": "刪除季", + "deleteShowConfirm": "刪除影集", + "deleteMovieConfirm": "刪除電影", + "deleteAnyway": "仍要刪除", + "confirmDeleteTarget": "確定要從您的伺服器永久刪除「${title}」嗎?", "deleteMultipleWarning": "這將會刪除所有單集及其檔案。", "deleteEpisodeCountWarning": { - "other": "" + "other": "這會刪除其中全部 ${n} 集及其檔案。" }, "deleteMultiPartWarning": { - "other": "" + "other": "此項目分散儲存於 ${n} 個檔案中,且全部都會被刪除。" }, "deleteSharedFileHeading": { - "other": "" + "other": "另有 ${n} 集儲存在同一檔案中,也會一併被刪除:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy 無法確認此操作會刪除哪些檔案,因此刪除範圍可能超出上方所列的項目。請取消後重試,或仍要刪除。", + "deleteScopeUnverifiedNoFileInfo": "您的伺服器未提供此項目的檔案資訊,因此 Plezy 無法確認此操作會刪除哪些檔案。刪除範圍可能超出上方所列的項目。", "mediaDeletedSuccessfully": "媒體已成功刪除", "mediaFailedToDelete": "刪除媒體失敗", "rate": "評分", @@ -625,9 +625,9 @@ "playNext": "播放下一集", "playButton": "播放", "pauseButton": "暫停", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "已暫停", + "playbackResumed": "播放中", + "loadingVideo": "正在載入影片", "showPlaybackControls": "顯示播放控制項", "hidePlaybackControls": "隱藏播放控制項", "seekBackwardButton": "後退 ${seconds} 秒", @@ -698,7 +698,7 @@ }, "removedFromContinueWatching": "已從「繼續觀看」中移除", "errorLoading": "錯誤:${error}", - "searchPartialResults": "", + "searchPartialResults": "部分媒體伺服器無法搜尋。目前顯示可取得的結果。", "streamInterrupted": "影片串流中斷。請按播放鍵或拖動進度條重試。", "liveStreamInterrupted": "直播串流中斷。請按播放鍵重試。", "fileInfoNotAvailable": "無法取得檔案資訊", @@ -737,8 +737,8 @@ "switchingToCompatiblePlayer": "正在切換至相容的播放器…", "serverLimitTitle": "播放失敗", "serverLimitBody": "伺服器錯誤(HTTP 500)。伺服器的頻寬或轉碼限制可能拒絕此播放要求。請聯絡伺服器擁有者調整設定。", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "檔案無法使用", + "mediaUnreadableBody": "伺服器找到了此項目,但無法讀取其檔案(HTTP 404)。檔案可能已移動、刪除,或其儲存空間離線。請聯絡伺服器擁有者檢查檔案並重新掃描媒體庫。", "logsUploaded": "日誌已上傳", "logsUploadFailed": "上傳日誌失敗", "logId": "日誌 ID" @@ -857,8 +857,8 @@ "sessionExpiredOne": "${name} 的工作階段已過期", "sessionExpiredMany": "${count} 個伺服器的工作階段已過期", "signInAgain": "重新登入", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "編輯 ${product} 連線", + "editMediaBrowserIntro": "為 ${serverName} 新增或移除 URL。Plezy 將使用延遲最低且可連線的 URL。" }, "discover": { "title": "發現", @@ -888,7 +888,7 @@ }, "errors": { "searchFailed": "搜尋失敗:${error}", - "searchUnavailable": "", + "searchUnavailable": "搜尋無法連線至任何媒體伺服器。", "connectionTimeout": "載入 ${context} 時連線逾時", "connectionFailed": "無法連線至媒體伺服器", "unableToLoad": "無法載入 ${context}。請重試。", @@ -1016,36 +1016,36 @@ "uploadLogs": "上傳日誌" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy 無法啟動", + "failedBody": "啟動期間發生問題。下方詳細資料可識別失敗的原因。", + "failedBodyRepairable": "Plezy 儲存的設定檔已損壞,必須先重建才能啟動。重試無法解決問題 — 請選擇「修復儲存空間」。", + "phaseLabel": "步驟", + "showDetails": "顯示詳細資料", + "hideDetails": "隱藏詳細資料", + "copyDetails": "複製詳細資料", + "detailsCopied": "詳細資料已複製到剪貼簿", + "uploadDetails": "上傳詳細資料", + "repairStorage": "修復儲存空間", + "repairTitle": "修復已儲存的資料?", + "repairBodyCommon": "Plezy 的設定檔已損壞且無法讀取。修復會將所有設定重設為預設值。", + "repairBodyOneCredential": "有一筆已儲存的登入資訊損壞且無法讀取。修復僅會移除該筆資訊,其他設定將保持不變。", + "repairBodySignInsKept": "您的伺服器與使用者設定檔應可保持登入狀態。", + "repairBodySignInsLost": "保護已儲存登入資訊的金鑰無法從此檔案中復原,因此您必須重新登入每個伺服器與使用者設定檔。您媒體伺服器上的內容不受影響。", + "repairBodySessionsUncertain": "追蹤服務(MAL、AniList、Simkl、Trakt)與 Seerr 分別儲存,可能保留也可能遺失。Plezy 會明確告知保留了哪些項目。", + "repairConfirm": "修復", + "repairSucceeded": "儲存空間已修復", + "repairNeedsRestart": "儲存空間已修復 — 需要重新啟動", + "restartRequiredBody": "您的資料已修復,但 Plezy 必須重新啟動才能使用。請關閉 Plezy 後重新開啟。", + "quitPlezy": "退出 Plezy", + "repairFailed": "修復失敗", + "repairKeptSignIns": "您的伺服器與使用者設定檔仍保持登入狀態。", + "repairLostSignIns": "保護已儲存登入資訊的金鑰無法復原。您必須重新登入每個伺服器與使用者設定檔。", + "repairLostSessions": "至少一個追蹤服務或 Seerr 連線已遺失,必須重新連線。", + "backupTitle": "已保留損壞檔案的副本", + "backupWarning": "其中包含您的登入憑證。請勿上傳或分享。", + "deleteBackup": "刪除副本", + "backupDeleted": "副本已刪除。", + "previousFailureTitle": "Plezy 上次啟動失敗" }, "licenses": { "relatedPackages": "相關套件", @@ -1102,131 +1102,131 @@ "searchPrompt": "在 ${source} 搜尋電影與影集。", "searchFailed": "搜尋失敗。請檢查網路連線後重試。", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "#${n} 熱門", + "rankAiring": "#${n} 播出中", + "rankRated": "#${n} 高分", + "rankFavorited": "#${n} 最多收藏", + "rankTrending": "#${n} 趨勢", + "rankSeasonal": "#${n} · ${season}", + "watchingNow": "${n} 觀看中", + "available": "可觀看", + "partiallyAvailable": "部分可觀看", + "availableIn4k": "4K 可觀看", + "requested": "已提出請求", + "pendingApproval": "等待核准", + "processing": "處理中", + "declined": "已拒絕", + "requestFailed": "請求失敗", + "requested4k": "已請求 4K", + "seasonsAvailable": "${available}/${total} 季", + "nextEpisodeIn": "第 ${episode} 集 ${duration} 後播出", + "nextAiringIn": "${duration} 後播出", + "episodesShort": "${n} 集", + "minutesPerEpisode": "每集 ${n} 分鐘", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} 人已收錄", + "viewersDay": "今日 ${n} 人觀看", + "viewersWeek": "本週 ${n} 人觀看", + "viewersMonth": "本月 ${n} 人觀看", + "viewersYear": "今年 ${n} 人觀看", + "viewersAllTime": "累計 ${n} 人觀看", + "planning": "${n} 人打算觀看", + "favorited": "${n} 人收藏", + "dropRate": "${percent} 的人棄番", "comments": { - "other": "" + "other": "${n} 則留言" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} 票", + "watching": "${n} 人正在觀看", + "completed": "${n} 人已看完", + "onHold": "${n} 人擱置中", + "dropped": "${n} 人棄番" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "冬季", + "spring": "春季", + "summer": "夏季", + "fall": "秋季", + "withYear": "${season} ${year} 年" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV 短片", + "movie": "電影", + "special": "特別篇", + "ova": "OVA", + "ona": "ONA", + "music": "音樂", + "other": "其他" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "原創", + "manga": "漫畫", + "lightNovel": "輕小說", + "novel": "小說", + "visualNovel": "視覺小說", + "game": "遊戲", + "webComic": "網路漫畫", + "musicRelease": "音樂", + "otherMedia": "其他" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "導演", + "writer": "編劇", + "producer": "製作人", + "creator": "原作者", + "composer": "作曲家" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "前傳", + "sequel": "續集", + "sideStory": "外傳", + "spinOff": "衍生作品", + "alternativeVersion": "其他版本", + "summary": "總集篇", + "parentStory": "原作", + "adaptation": "改編", + "other": "相關" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "${day} ${time} 播出", + "broadcastWithZone": "${day} ${time} ${timezone} 播出", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "原始標題", + "alsoKnownAs": "又名", + "studios": "製作公司", + "country": "國家", + "language": "語言", + "released": "發行日期", + "physicalRelease": "光碟發行", + "ended": "已完結", + "addedOn": "新增於 ${date}", + "yourRating": "您的評分", + "budget": "預算", + "revenue": "票房", + "contentAdvisory": "年齡分級", + "tags": "標籤", + "revealSpoilerTags": "顯示劇透標籤", + "links": "連結", + "watchOn": "觀看平台", + "watchTrailer": "觀看預告片", + "openOn": "在 ${site} 開啟", + "crew": "幕後團隊", + "ratings": "評分", + "schedule": "播出時間", "recommendedByUsers": { - "other": "" + "other": "${n} 位使用者推薦" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "由 ${who} 推薦", + "favoritedBy": "由 ${who} 收藏", + "unairedEpisodes": "尚有 ${n} 集未播出", + "recommendedByPercent": "${percent} 的觀眾推薦", + "relatedTitles": "相關作品", + "background": "背景介紹" }, "totalResults": { - "other": "" + "other": "${n} 筆結果" } }, "liveTv": { @@ -1492,15 +1492,15 @@ "editSyncRule": "編輯同步規則", "removeSyncRule": "刪除同步規則", "removeSyncRuleConfirm": "停止同步「${title}」?已下載的單集將會保留。", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "停止同步「${title}」?", + "deleteSyncRuleDownloads": "一併刪除相關的下載內容", + "deleteSyncRuleDownloadsDescription": "供其他同步規則或使用者設定檔使用的下載內容將予以保留。", "syncRuleCreated": "同步規則已建立 — 將保留 ${count} 個未觀看單集", "syncRuleUpdated": "同步規則已更新", "syncRuleRemoved": "同步規則已刪除", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "同步規則與相關的下載內容已刪除", + "syncRuleCleanupBusy": "同步規則正在更新中。請稍後再試。", + "syncRuleCleanupUnavailable": "無法安全地識別相關的下載內容。請重新連線伺服器後再試,或在不刪除下載內容的情況下移除規則。", "syncedNewEpisodes": "已為 ${title} 同步 ${count} 個新單集", "activeSyncRules": "同步規則", "noSyncRules": "沒有同步規則", @@ -1865,7 +1865,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "在 ${service} 啟用 Plezy", @@ -1898,12 +1898,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "新增 ${product} 伺服器", "serverUrls": "伺服器 URL", "serverUrlsHelper": "可輸入多個連線網址,以逗號區隔。", "findServer": "尋找伺服器", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "正在尋找本機的 ${product} 伺服器…", + "localMediaBrowserServers": "本機的 ${product} 伺服器", "username": "使用者名稱", "password": "密碼", "signIn": "登入", @@ -1915,15 +1915,15 @@ "addPlexTitle": "使用 Plex 登入", "pinExpired": "PIN 碼在登入前已過期。請重試。", "failedToRegisterAccount": "註冊帳戶失敗:${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "請輸入您的 ${product} 伺服器 URL", "addConnectionTitle": "新增連線", "addConnectionTitleScoped": "新增連線至 ${name}", "signInWithPlexCard": "使用 Plex 登入", "signInWithPlexCardSubtitle": "授權此裝置。將會新增共享的伺服器連線。", "signInWithPlexCardSubtitleScoped": "授權 Plex 帳戶。Home 使用者會建立為個別的使用者設定檔。", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "連線至 ${product}", + "connectToMediaBrowserCardSubtitle": "輸入您的伺服器 URL、使用者名稱與密碼。", + "connectToMediaBrowserCardSubtitleScoped": "登入您的 ${product} 伺服器。將綁定至 ${name}。", "borrowFromAnotherProfile": "從另一個使用者設定檔共用", "borrowFromAnotherProfileSubtitle": "重複使用另一個使用者設定檔的連線資訊。受 PIN 碼保護的使用者設定檔需輸入 PIN 碼。" } diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 54a8ff90..1678acf1 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -11,7 +11,7 @@ "waitingForAuth": "正在等待身份验证…\n请在浏览器中登录。", "useBrowser": "使用浏览器", "or": "或", - "connectToMediaBrowser": "", + "connectToMediaBrowser": "连接到 ${product}", "useQuickConnect": "使用 Quick Connect", "quickConnectInstructions": "在 Jellyfin 中打开 Quick Connect 并输入此代码。", "quickConnectWaiting": "等待批准…", @@ -66,17 +66,17 @@ "exitFullscreen": "退出全屏", "pressBackAgainToExit": "再按一次返回键退出", "ratingSource": { - "critic": "", - "audience": "", - "imdb": "", - "tmdb": "", - "rottenTomatoes": "", - "simkl": "", - "mal": "", - "anilist": "", - "trakt": "", - "rottenTomatoesCritic": "", - "rottenTomatoesAudience": "" + "critic": "影评人", + "audience": "观众", + "imdb": "IMDb", + "tmdb": "TMDB", + "rottenTomatoes": "Rotten Tomatoes", + "simkl": "Simkl", + "mal": "MyAnimeList", + "anilist": "AniList", + "trakt": "Trakt", + "rottenTomatoesCritic": "Rotten Tomatoes 影评人", + "rottenTomatoesAudience": "Rotten Tomatoes 观众" } }, "screens": { @@ -120,7 +120,7 @@ "darkTheme": "深色", "oledTheme": "OLED", "libraryDensity": "媒体库密度", - "displayScale": "", + "displayScale": "界面缩放", "compact": "紧凑", "comfortable": "舒适", "tvCornerSpotlightBackdrop": "右上角聚焦背景图", @@ -170,11 +170,11 @@ "bufferSizeMB": "${size}MB", "bufferSizeAuto": "自动(推荐)", "bufferSizeWarning": "可用内存 ${heap}MB。${size}MB 缓冲可能影响播放。", - "playbackBuffer": "", - "playbackBufferAuto": "", - "playbackBufferLarge": "", - "playbackBufferExtraLarge": "", - "playbackBufferDescription": "", + "playbackBuffer": "播放缓冲", + "playbackBufferAuto": "自动(推荐)", + "playbackBufferLarge": "大", + "playbackBufferExtraLarge": "特大", + "playbackBufferDescription": "针对不稳定的连接缓冲更多内容。也受缓冲大小限制。", "defaultQualityTitle": "默认画质", "musicQualityTitle": "音乐音质", "subtitleStyling": "字幕样式", @@ -208,9 +208,9 @@ "debugLoggingDescription": "启用详细日志记录以便故障排除", "viewLogs": "查看日志", "viewLogsDescription": "查看应用日志", - "clearImageCache": "", - "clearImageCacheDescription": "", - "clearImageCacheSuccess": "", + "clearImageCache": "清除图片缓存", + "clearImageCacheDescription": "清除缓存的封面与缩略图。图片在重新下载前加载速度可能会变慢。", + "clearImageCacheSuccess": "图片缓存已成功清除", "resetSettings": "重置设置", "resetSettingsDescription": "恢复默认设置。此操作无法撤销。", "resetSettingsSuccess": "设置重置成功", @@ -402,118 +402,118 @@ }, "fileInfo": { "title": "文件信息", - "overview": "", + "overview": "简介", "video": "视频", "audio": "音频", "subtitles": "字幕", - "images": "", - "dataStreams": "", - "lyrics": "", + "images": "内嵌图片", + "dataStreams": "数据流", + "lyrics": "歌词", "file": "文件", - "attachments": "", - "delivery": "", - "versionCounter": "", - "fileCounter": "", - "noStreams": "", - "copyPath": "", - "pathCopied": "", + "attachments": "附件", + "delivery": "传输方式", + "versionCounter": "第 ${index} 个版本,共 ${count} 个", + "fileCounter": "第 ${index} 个文件,共 ${count} 个", + "noStreams": "服务器报告此文件没有媒体流。", + "copyPath": "复制路径", + "pathCopied": "文件路径已复制", "codec": "编解码器", - "codecTag": "", + "codecTag": "编码器标签", "resolution": "分辨率", - "codedResolution": "", + "codedResolution": "编码分辨率", "bitrate": "比特率", "frameRate": "帧率", - "rotation": "", - "comment": "", - "audioDescription": "", - "headerCompression": "", - "sidecarFile": "", - "transportTimestamp": "", - "displayOffset": "", - "previewFailureCode": "", - "previewRetries": "", + "rotation": "旋转", + "comment": "注释", + "audioDescription": "音频描述", + "headerCompression": "头部压缩", + "sidecarFile": "外挂文件", + "transportTimestamp": "传输时间戳", + "displayOffset": "显示偏移", + "previewFailureCode": "预览失败代码", + "previewRetries": "预览重试次数", "aspectRatio": "宽高比", - "pixelAspectRatio": "", + "pixelAspectRatio": "像素宽高比", "profile": "编码配置", - "level": "", + "level": "级别", "bitDepth": "位深度", - "pixelFormat": "", + "pixelFormat": "像素格式", "colorSpace": "色彩空间", "colorRange": "色彩范围", "colorPrimaries": "色彩基色", - "colorTransfer": "", + "colorTransfer": "色彩转换", "chromaSubsampling": "色度子采样", - "chromaLocation": "", - "scanType": "", - "interlaced": "", - "anamorphic": "", - "referenceFrames": "", - "dynamicRange": "", - "dolbyVision": "", - "dolbyVisionLevel": "", - "dolbyVisionVersion": "", - "dolbyVisionLayers": "", - "baseLayerCompatibility": "", - "avcBitstream": "", - "nalLengthSize": "", - "scalingMatrix": "", - "streamIdentifier": "", - "streamIndex": "", - "streamId": "", - "language": "", - "languageCode": "", - "streamTitle": "", + "chromaLocation": "色度位置", + "scanType": "扫描类型", + "interlaced": "隔行扫描", + "anamorphic": "变形宽银幕", + "referenceFrames": "参考帧", + "dynamicRange": "动态范围", + "dolbyVision": "Dolby Vision", + "dolbyVisionLevel": "Dolby Vision 级别", + "dolbyVisionVersion": "Dolby Vision 版本", + "dolbyVisionLayers": "Dolby Vision 图层", + "baseLayerCompatibility": "基础层兼容性", + "avcBitstream": "AVC 比特流", + "nalLengthSize": "NAL 长度", + "scalingMatrix": "自定义缩放矩阵", + "streamIdentifier": "流标识符", + "streamIndex": "流索引", + "streamId": "流 ID", + "language": "语言", + "languageCode": "语言代码", + "streamTitle": "轨道标题", "channels": "声道", - "sampleRate": "", - "spatialAudio": "", - "textBased": "", - "subtitleFormat": "", - "provider": "", - "matchScore": "", - "externalDelivery": "", - "sidecarPath": "", - "sourceStream": "", - "temporary": "", - "timeBase": "", + "sampleRate": "采样率", + "spatialAudio": "空间音频", + "textBased": "基于文本", + "subtitleFormat": "外挂文件格式", + "provider": "提供方", + "matchScore": "匹配分数", + "externalDelivery": "可单独提供", + "sidecarPath": "外挂文件路径", + "sourceStream": "复制来源", + "temporary": "临时", + "timeBase": "时间基准", "overallBitrate": "总比特率", "path": "路径", - "fileName": "", + "fileName": "文件名", "size": "大小", - "totalSize": "", + "totalSize": "总大小", "container": "容器", "duration": "时长", - "previewThumbnails": "", - "previewIndex": "", - "packetLength": "", - "filePresent": "", - "fileReadable": "", - "streamPath": "", + "previewThumbnails": "预览缩略图", + "previewIndex": "预览索引", + "packetLength": "数据包长度", + "filePresent": "文件存在", + "fileReadable": "服务器可读", + "streamPath": "流路径", "optimizedForStreaming": "已针对流式传输优化", "has64bitOffsets": "64 位偏移量", - "protocol": "", - "mediaType": "", - "sourceKind": "", - "optimizedVersion": "", - "optimizationTarget": "", - "deletedAt": "", - "remoteSource": "", - "infiniteStream": "", - "directPlay": "", - "directStream": "", - "transcoding": "", - "etag": "", - "versionId": "", - "fileId": "", - "defaultAudioTrack": "", - "defaultSubtitleTrack": "", - "subtitlesOff": "", - "flagDefault": "", - "flagForced": "", - "flagSelected": "", - "flagExternal": "", - "flagHearingImpaired": "", - "flagDub": "", - "flagOriginal": "" + "protocol": "协议", + "mediaType": "媒体类型", + "sourceKind": "来源类型", + "optimizedVersion": "优化版本", + "optimizationTarget": "优化目标", + "deletedAt": "已删除", + "remoteSource": "远程来源", + "infiniteStream": "无限流", + "directPlay": "直接播放", + "directStream": "直接串流", + "transcoding": "转码", + "etag": "ETag", + "versionId": "版本 ID", + "fileId": "文件 ID", + "defaultAudioTrack": "默认音轨", + "defaultSubtitleTrack": "默认字幕轨道", + "subtitlesOff": "关闭", + "flagDefault": "默认", + "flagForced": "强制", + "flagSelected": "已选", + "flagExternal": "外部", + "flagHearingImpaired": "听障辅助", + "flagDub": "配音", + "flagOriginal": "原声" }, "mediaMenu": { "markAsWatched": "标记为已观看", @@ -524,32 +524,32 @@ "shufflePlay": "随机播放", "shuffleNotAvailableOffline": "离线时无法随机播放", "fileInfo": "文件信息", - "deleteEpisodeFromServer": "", - "deleteSeasonFromServer": "", - "deleteShowFromServer": "", - "deleteMovieFromServer": "", - "deleteEpisodeTitle": "", - "deleteSeasonTitle": "", - "deleteShowTitle": "", - "deleteMovieTitle": "", - "deleteEpisodeConfirm": "", - "deleteSeasonConfirm": "", - "deleteShowConfirm": "", - "deleteMovieConfirm": "", - "deleteAnyway": "", - "confirmDeleteTarget": "", + "deleteEpisodeFromServer": "从服务器删除单集", + "deleteSeasonFromServer": "从服务器删除季度", + "deleteShowFromServer": "从服务器删除剧集", + "deleteMovieFromServer": "从服务器删除电影", + "deleteEpisodeTitle": "删除这个单集?", + "deleteSeasonTitle": "删除这一季度?", + "deleteShowTitle": "删除这部剧集?", + "deleteMovieTitle": "删除这部电影?", + "deleteEpisodeConfirm": "删除单集", + "deleteSeasonConfirm": "删除季度", + "deleteShowConfirm": "删除剧集", + "deleteMovieConfirm": "删除电影", + "deleteAnyway": "仍然删除", + "confirmDeleteTarget": "从你的服务器永久删除 ${title}?", "deleteMultipleWarning": "这包括所有剧集及其文件。", "deleteEpisodeCountWarning": { - "other": "" + "other": "这将删除其中全部 ${n} 集以及它们的文件。" }, "deleteMultiPartWarning": { - "other": "" + "other": "此项目存储在 ${n} 个文件中,所有这些文件都会被删除。" }, "deleteSharedFileHeading": { - "other": "" + "other": "另外 ${n} 集存储在同一个文件中,也会一并删除:" }, - "deleteScopeUnverifiedProbeFailed": "", - "deleteScopeUnverifiedNoFileInfo": "", + "deleteScopeUnverifiedProbeFailed": "Plezy 无法确认此操作会删除哪些文件,因此删除范围可能超出上面提到的项目。请取消后重试,或仍然删除。", + "deleteScopeUnverifiedNoFileInfo": "你的服务器没有提供此项目的文件详情,因此 Plezy 无法确认此操作会删除哪些文件。删除范围可能超出上面提到的项目。", "mediaDeletedSuccessfully": "媒体项已成功删除", "mediaFailedToDelete": "删除媒体项失败", "rate": "评分", @@ -625,9 +625,9 @@ "playNext": "播放下一集", "playButton": "播放", "pauseButton": "暂停", - "playbackPaused": "", - "playbackResumed": "", - "loadingVideo": "", + "playbackPaused": "已暂停", + "playbackResumed": "正在播放", + "loadingVideo": "正在加载视频", "showPlaybackControls": "显示播放控制项", "hidePlaybackControls": "隐藏播放控制项", "seekBackwardButton": "快退 ${seconds} 秒", @@ -698,7 +698,7 @@ }, "removedFromContinueWatching": "已从继续观看中移除", "errorLoading": "出错:${error}", - "searchPartialResults": "", + "searchPartialResults": "部分媒体服务器无法搜索。正在显示可用的结果。", "streamInterrupted": "视频流已中断。按播放键或拖动进度条重试。", "liveStreamInterrupted": "直播流已中断。按播放键重试。", "fileInfoNotAvailable": "文件信息不可用", @@ -737,8 +737,8 @@ "switchingToCompatiblePlayer": "正在切换到兼容的播放器…", "serverLimitTitle": "播放失败", "serverLimitBody": "服务器错误(HTTP 500)。此次会话可能因带宽或转码限制而被拒绝。请联系服务器所有者调整限制。", - "mediaUnreadableTitle": "", - "mediaUnreadableBody": "", + "mediaUnreadableTitle": "文件不可用", + "mediaUnreadableBody": "服务器找到了此项目,但无法读取其文件(HTTP 404)。文件可能已被移动、删除,或其存储已离线。请联系服务器管理员检查文件并重新扫描媒体库。", "logsUploaded": "日志已上传", "logsUploadFailed": "上传日志失败", "logId": "日志 ID" @@ -857,8 +857,8 @@ "sessionExpiredOne": "${name} 的会话已过期", "sessionExpiredMany": "${count} 个服务器的会话已过期", "signInAgain": "重新登录", - "editMediaBrowserTitle": "", - "editMediaBrowserIntro": "" + "editMediaBrowserTitle": "编辑 ${product} 连接", + "editMediaBrowserIntro": "为 ${serverName} 添加或移除 URL。Plezy 会使用延迟最低且可访问的 URL。" }, "discover": { "title": "发现", @@ -888,7 +888,7 @@ }, "errors": { "searchFailed": "搜索失败:${error}", - "searchUnavailable": "", + "searchUnavailable": "搜索无法连接任何媒体服务器。", "connectionTimeout": "加载 ${context} 时连接超时", "connectionFailed": "无法连接到媒体服务器", "unableToLoad": "无法加载${context}。请重试。", @@ -1016,36 +1016,36 @@ "uploadLogs": "上传日志" }, "startup": { - "failedTitle": "", - "failedBody": "", - "failedBodyRepairable": "", - "phaseLabel": "", - "showDetails": "", - "hideDetails": "", - "copyDetails": "", - "detailsCopied": "", - "uploadDetails": "", - "repairStorage": "", - "repairTitle": "", - "repairBodyCommon": "", - "repairBodyOneCredential": "", - "repairBodySignInsKept": "", - "repairBodySignInsLost": "", - "repairBodySessionsUncertain": "", - "repairConfirm": "", - "repairSucceeded": "", - "repairNeedsRestart": "", - "restartRequiredBody": "", - "quitPlezy": "", - "repairFailed": "", - "repairKeptSignIns": "", - "repairLostSignIns": "", - "repairLostSessions": "", - "backupTitle": "", - "backupWarning": "", - "deleteBackup": "", - "backupDeleted": "", - "previousFailureTitle": "" + "failedTitle": "Plezy 无法启动", + "failedBody": "启动过程中出现问题。以下详情指出了失败的原因。", + "failedBodyRepairable": "Plezy 的已保存设置文件已损坏,必须先重建才能启动。重试没有用——请选择“修复存储”。", + "phaseLabel": "步骤", + "showDetails": "显示详情", + "hideDetails": "隐藏详情", + "copyDetails": "复制详情", + "detailsCopied": "详情已复制到剪贴板", + "uploadDetails": "上传详情", + "repairStorage": "修复存储", + "repairTitle": "修复已存储的数据?", + "repairBodyCommon": "Plezy 的设置文件已损坏且无法读取。修复会将所有设置重置为默认值。", + "repairBodyOneCredential": "有一项已保存的登录信息已损坏且无法读取。修复只会移除这一项,其他设置保持不变。", + "repairBodySignInsKept": "你的服务器和个人资料应保持登录状态。", + "repairBodySignInsLost": "保护已保存登录信息的密钥无法从此文件中恢复,因此你需要重新登录每个服务器和个人资料。媒体服务器上的内容不受影响。", + "repairBodySessionsUncertain": "追踪服务(MAL、AniList、Simkl、Trakt)和 Seerr 是分开存储的,可能保留也可能无法保留。Plezy 会明确告诉你保留了哪些。", + "repairConfirm": "修复", + "repairSucceeded": "存储已修复", + "repairNeedsRestart": "存储已修复 — 需要重启", + "restartRequiredBody": "你的数据已修复,但 Plezy 需要重新启动后才能使用。请关闭 Plezy 并重新打开。", + "quitPlezy": "退出 Plezy", + "repairFailed": "修复失败", + "repairKeptSignIns": "你的服务器和个人资料仍然保持登录状态。", + "repairLostSignIns": "保护已保存登录信息的密钥无法恢复。你需要重新登录每个服务器和个人资料。", + "repairLostSessions": "至少有一个追踪服务或 Seerr 连接已丢失,需要重新连接。", + "backupTitle": "已保留损坏文件的副本", + "backupWarning": "其中包含你的登录凭据。请勿上传或分享。", + "deleteBackup": "删除副本", + "backupDeleted": "副本已删除。", + "previousFailureTitle": "Plezy 上次启动失败" }, "licenses": { "relatedPackages": "相关软件包", @@ -1102,131 +1102,131 @@ "searchPrompt": "在 ${source} 上搜索电影和剧集。", "searchFailed": "搜索失败。请检查网络连接后重试。", "badge": { - "rankPopular": "", - "rankAiring": "", - "rankRated": "", - "rankFavorited": "", - "rankTrending": "", - "rankSeasonal": "", - "watchingNow": "", - "available": "", - "partiallyAvailable": "", - "availableIn4k": "", - "requested": "", - "pendingApproval": "", - "processing": "", - "declined": "", - "requestFailed": "", - "requested4k": "", - "seasonsAvailable": "", - "nextEpisodeIn": "", - "nextAiringIn": "", - "episodesShort": "", - "minutesPerEpisode": "", - "adult": "" + "rankPopular": "热门榜第 #${n} 名", + "rankAiring": "在播榜第 #${n} 名", + "rankRated": "评分榜第 #${n} 名", + "rankFavorited": "收藏榜第 #${n} 名", + "rankTrending": "趋势榜第 #${n} 名", + "rankSeasonal": "${season}榜第 #${n} 名", + "watchingNow": "${n} 人正在观看", + "available": "可观看", + "partiallyAvailable": "部分可观看", + "availableIn4k": "提供 4K", + "requested": "已请求", + "pendingApproval": "待批准", + "processing": "处理中", + "declined": "已拒绝", + "requestFailed": "请求失败", + "requested4k": "已请求 4K", + "seasonsAvailable": "已有 ${available}/${total} 季", + "nextEpisodeIn": "第 ${episode} 集将在 ${duration} 后播出", + "nextAiringIn": "下一集将在 ${duration} 后播出", + "episodesShort": "${n} 集", + "minutesPerEpisode": "${n} 分钟/集", + "adult": "18+" }, "stats": { - "listed": "", - "viewersDay": "", - "viewersWeek": "", - "viewersMonth": "", - "viewersYear": "", - "viewersAllTime": "", - "planning": "", - "favorited": "", - "dropRate": "", + "listed": "${n} 人已标记", + "viewersDay": "今日 ${n} 人观看", + "viewersWeek": "本周 ${n} 人观看", + "viewersMonth": "本月 ${n} 人观看", + "viewersYear": "今年 ${n} 人观看", + "viewersAllTime": "累计 ${n} 人观看", + "planning": "${n} 人想看", + "favorited": "${n} 人收藏", + "dropRate": "${percent} 弃番", "comments": { - "other": "" + "other": "${n} 条评论" }, - "votes": "", - "watching": "", - "completed": "", - "onHold": "", - "dropped": "" + "votes": "${n} 票", + "watching": "${n} 人正在观看", + "completed": "${n} 人已看完", + "onHold": "${n} 人搁置", + "dropped": "${n} 人弃番" }, "season": { - "winter": "", - "spring": "", - "summer": "", - "fall": "", - "withYear": "" + "winter": "冬季", + "spring": "春季", + "summer": "夏季", + "fall": "秋季", + "withYear": "${year}年${season}" }, "format": { - "tv": "", - "tvShort": "", - "movie": "", - "special": "", - "ova": "", - "ona": "", - "music": "", - "other": "" + "tv": "TV", + "tvShort": "TV 短片", + "movie": "电影", + "special": "特别篇", + "ova": "OVA", + "ona": "ONA", + "music": "音乐", + "other": "其他" }, "sourceMaterial": { - "original": "", - "manga": "", - "lightNovel": "", - "novel": "", - "visualNovel": "", - "game": "", - "webComic": "", - "musicRelease": "", - "otherMedia": "" + "original": "原创", + "manga": "漫画", + "lightNovel": "轻小说", + "novel": "小说", + "visualNovel": "视觉小说", + "game": "游戏", + "webComic": "网络漫画", + "musicRelease": "音乐", + "otherMedia": "其他" }, "creditRole": { - "director": "", - "writer": "", - "producer": "", - "creator": "", - "composer": "" + "director": "导演", + "writer": "编剧", + "producer": "制片人", + "creator": "创作者", + "composer": "作曲" }, "relation": { - "prequel": "", - "sequel": "", - "sideStory": "", - "spinOff": "", - "alternativeVersion": "", - "summary": "", - "parentStory": "", - "adaptation": "", - "other": "" + "prequel": "前传", + "sequel": "续集", + "sideStory": "番外篇", + "spinOff": "衍生作品", + "alternativeVersion": "另一版本", + "summary": "总集篇", + "parentStory": "原作", + "adaptation": "改编", + "other": "相关" }, - "broadcast": "", - "broadcastWithZone": "", + "broadcast": "每周${day} ${time}播出", + "broadcastWithZone": "每周${day} ${time} ${timezone}播出", "detail": { - "originalTitle": "", - "alsoKnownAs": "", - "studios": "", - "country": "", - "language": "", - "released": "", - "physicalRelease": "", - "ended": "", - "addedOn": "", - "yourRating": "", - "budget": "", - "revenue": "", - "contentAdvisory": "", - "tags": "", - "revealSpoilerTags": "", - "links": "", - "watchOn": "", - "watchTrailer": "", - "openOn": "", - "crew": "", - "ratings": "", - "schedule": "", + "originalTitle": "原名", + "alsoKnownAs": "又名", + "studios": "制作公司", + "country": "国家/地区", + "language": "语言", + "released": "上映日期", + "physicalRelease": "光盘发售", + "ended": "完结日期", + "addedOn": "添加于 ${date}", + "yourRating": "你的评分", + "budget": "预算", + "revenue": "票房", + "contentAdvisory": "年龄分级", + "tags": "标签", + "revealSpoilerTags": "显示剧透标签", + "links": "链接", + "watchOn": "观看平台", + "watchTrailer": "观看预告片", + "openOn": "在 ${site} 打开", + "crew": "演职人员", + "ratings": "评分", + "schedule": "播出时间", "recommendedByUsers": { - "other": "" + "other": "由 ${n} 位用户推荐" }, - "recommendedBy": "", - "favoritedBy": "", - "unairedEpisodes": "", - "recommendedByPercent": "", - "relatedTitles": "", - "background": "" + "recommendedBy": "由 ${who} 推荐", + "favoritedBy": "由 ${who} 收藏", + "unairedEpisodes": "还有 ${n} 集未播出", + "recommendedByPercent": "${percent} 的观众推荐", + "relatedTitles": "相关作品", + "background": "背景" }, "totalResults": { - "other": "" + "other": "${n} 条结果" } }, "liveTv": { @@ -1492,15 +1492,15 @@ "editSyncRule": "编辑同步规则", "removeSyncRule": "删除同步规则", "removeSyncRuleConfirm": "停止同步“${title}”?已下载的剧集将被保留。", - "removeListSyncRuleConfirm": "", - "deleteSyncRuleDownloads": "", - "deleteSyncRuleDownloadsDescription": "", + "removeListSyncRuleConfirm": "停止同步“${title}”?", + "deleteSyncRuleDownloads": "同时删除相关下载", + "deleteSyncRuleDownloadsDescription": "被其他同步规则或个人资料使用的下载将保留。", "syncRuleCreated": "同步规则已创建 — 保留 ${count} 集未观看内容", "syncRuleUpdated": "同步规则已更新", "syncRuleRemoved": "同步规则已删除", - "syncRuleAndDownloadsRemoved": "", - "syncRuleCleanupBusy": "", - "syncRuleCleanupUnavailable": "", + "syncRuleAndDownloadsRemoved": "同步规则及相关下载已删除", + "syncRuleCleanupBusy": "同步规则正在更新中,请稍后再试。", + "syncRuleCleanupUnavailable": "无法安全识别相关下载。请重新连接服务器后再试,或在不删除下载的情况下移除规则。", "syncedNewEpisodes": "已为 ${title} 同步 ${count} 个新剧集", "activeSyncRules": "同步规则", "noSyncRules": "没有同步规则", @@ -1865,7 +1865,7 @@ "anilist": "AniList", "simkl": "Simkl", "seerr": "Seerr", - "mdblist": "" + "mdblist": "MDBList" }, "deviceCode": { "title": "在 ${service} 上激活 Plezy", @@ -1898,12 +1898,12 @@ } }, "addServer": { - "addMediaBrowserTitle": "", + "addMediaBrowserTitle": "添加 ${product} 服务器", "serverUrls": "服务器 URL", "serverUrlsHelper": "可输入多个 URL,并用逗号分隔。", "findServer": "查找服务器", - "searchingLocalMediaBrowserServers": "", - "localMediaBrowserServers": "", + "searchingLocalMediaBrowserServers": "正在查找本地 ${product} 服务器…", + "localMediaBrowserServers": "本地 ${product} 服务器", "username": "用户名", "password": "密码", "signIn": "登录", @@ -1915,15 +1915,15 @@ "addPlexTitle": "使用 Plex 登录", "pinExpired": "PIN 在登录前已过期。请重试。", "failedToRegisterAccount": "注册账户失败:${error}", - "enterMediaBrowserUrlError": "", + "enterMediaBrowserUrlError": "请输入你的 ${product} 服务器 URL", "addConnectionTitle": "添加连接", "addConnectionTitleScoped": "添加到 ${name}", "signInWithPlexCard": "使用 Plex 登录", "signInWithPlexCardSubtitle": "授权此设备。共享服务器会被添加。", "signInWithPlexCardSubtitleScoped": "授权一个 Plex 账户。Plex Home 用户将成为 Plezy 用户资料。", - "connectToMediaBrowserCard": "", - "connectToMediaBrowserCardSubtitle": "", - "connectToMediaBrowserCardSubtitleScoped": "", + "connectToMediaBrowserCard": "连接到 ${product}", + "connectToMediaBrowserCardSubtitle": "输入你的服务器 URL、用户名和密码。", + "connectToMediaBrowserCardSubtitleScoped": "登录你的 ${product} 服务器。将绑定到 ${name}。", "borrowFromAnotherProfile": "使用其他用户资料的连接", "borrowFromAnotherProfileSubtitle": "复用另一个用户资料的连接。受 PIN 保护的用户资料需要输入 PIN。" }